首页 > 代码库 > 你不知道的JavaScript(this)
你不知道的JavaScript(this)
对this的常见误解
this指向函数本身;
this指向函数的词法作用域;
this是在运行时进行绑定的,并不是在编写时,它的上下文取决于函数调用时的条件。
this的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式。
function identify() { return this.name.toUpperCase(); } function speak() { var greeting = “Hello, I’m” + identify.call(this); console.log(greetin); } var me = { name: “Kyle" }; var you = { name: “Reader" }; identify.call(me); identify.call(you); speak.call(me); speak.call(you);
对象属性引用链中只有最顶层或者说最后一层会影响调用位置
function foo() { console.log(this.a); } var obj2 = { a: 42, foo: foo }; var obj1 = { a: 2, obj2: obj2 }; obj1.obj2.foo(); // 42
判断this的顺序:
?函数是否在new中调用(new绑定)?如果是的话this绑定的是新创建的对象
var bar = new foo()
?函数是否通过call、apply(显示绑定)或者硬绑定调用?如果是的话,this绑定的是指定的对象
var bar = foo.call(obj2)
?函数是否在某个上下文对象中调用(隐式绑定)?如果是的话,this绑定的是那个上下文对象
var bar = obj1.foo();
?如果都不是的话,使用默认绑定。严格模式下,绑定到undefined,否则绑定到全局对象。
你不知道的JavaScript(this)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。