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的指向

相关推荐
kyriewen2 小时前
我把 10 道面试题答案真跑了一遍:6 道是错的
前端·javascript·面试
WebInfra3 小时前
Rspack 2.3 发布:联手 SWC 团队带来全新编译器
前端·javascript·github
FRing034 小时前
JavaScript入门到精通三十一(原型继承、原型链)
开发语言·前端·javascript
程序员大阳4 小时前
副队长JavaScript教程(52)-DOM操作元素的内容
javascript·dom·innertext·innerhtml·value·内容操作
裕波6 小时前
苏千|从 cnpm 到 Vite+:AI 时代的开发者体验演进
javascript
console.log('npc')6 小时前
周期任务功能完整实现:CRON 编辑器 + 模板变量 + 执行历史
javascript·vue.js·编辑器
程序员大阳6 小时前
副队长JavaScript教程(58)-基于DOM的网页留言板开发
javascript·实例·dom·案例·留言板
咚咚咚小柒6 小时前
【前端】LangChain.js学习
前端·javascript·人工智能·typescript·langchain·vue·ai编程
程序员大阳8 小时前
副队长JavaScript教程(55)-DOM节点增删改查
javascript·dom·增删改查·节点·克隆
程序0078 小时前
天地图实现收货地址定位
前端·javascript·css