Javascript函数里的this指向

this的指向基于函数执行环境动态绑定

  1. 函数作为对象的方法,函数里的this指向对象
js 复制代码
var a=3;
var obj ={  
  a:1;   
  getA:function(){alert(this.a);
}
obj.getA(); // 输出 1
  1. 函数作为普通函数调用,函数里的this总是指向window
js 复制代码
var name ='globalname';
var myObject ={      
  name:'thisname',      
  getName:function(){return this.name;}    
};
var getName =myObject.getName;
console.log(getName());//输出globalname,当赋值后直接调用getName相当于普通函数调用
js 复制代码
// html
<div id='div1'>我是div1</div>
// js
var  id ='globalid';
document.getElementById('div1').onclick =function(){
alert(this.id);
var callback = function(){ alert(this.id)};}; 
callback();
}
//div1 globalid
  1. 作为构造器调用当用new运算符调用函数时,该函数总会返回一个对象,通常情况下,构造器里的this就指向返回的这个对象
js 复制代码
var MyClass = function(){  this.name = 'sven';}
var obj = new MyClass();
alert ( obj.name ); // 输出:sven 

如果构造器显式地返回了一个object类型的对象,那么此次运算结果最终会返回这个对象,而不是我们之前期待的this

js 复制代码
var MyClass = function(){  this.name = 'sven';  return {name:'anne'};  }
var obj = new MyClass(); 
alert ( obj.name ); // 输出:anne

如果构造器不显式地返回任何数据,或者是返回一个非对象类型的数据,就不会造成上述问题

js 复制代码
var MyClass = function(){  this.name = 'sven';  return 'anne';  }
var obj = new MyClass(); 
alert ( obj.name ); // 输出:sven
  1. 箭头函数的作用域

箭头函数在哪里定义就指向哪里。箭头函数没有自己的 this,会捕获定义时的外层 this(词法绑定)。

js 复制代码
const obj2 = {  
  name: 'Tom', 
  greet: () => console.log(this.name)
};
obj2.greet(); // undefined(因为 this 来自全局)

更改this的指向

主要通过call,apply,bind来更改函数中this的指向

相关推荐
熊猫_豆豆2 小时前
一个模拟四轴飞行器在随机气流扰动下悬停飞行的交互式3D仿真网页,包含飞行器建模与PID控制算法
javascript·3d·html·四轴无人机模拟飞行
来恩10033 小时前
jQuery选择器
前端·javascript·jquery
前端繁华如梦3 小时前
树上挂苹果还是挂玻璃球?Three.js 程序化果实的完整实现指南
前端·javascript
CDwenhuohuo3 小时前
优惠券组件直接用 uview plus
前端·javascript·vue.js
川冰ICE4 小时前
TypeScript装饰器与元编程实战
前端·javascript·typescript
AI砖家4 小时前
Vue3组件传参大全,各种传参方式的对比
前端·javascript·vue.js
希望永不加班4 小时前
var局部变量类型推断的利弊
java·服务器·前端·javascript·html
threelab5 小时前
Three.js 3D 地图可视化 | 三维可视化 / AI 提示词
前端·javascript·人工智能·3d·着色器
失眠的咕噜5 小时前
PDA 安卓设备上传多张图片
android·前端·javascript
掰头战士6 小时前
深入了解JS原型及原型继承链机制
javascript