繁体   English   中英

在将“方法”分配给另一个变量时,javascript的'this'绑定如何工作?

[英]How does javascript's 'this' binding work when assigning a “method” to another variable?

考虑:

function Thing() {
    this.prop = null
}

Thing.prototype.whoIsThis = function() {
    console.log(this)
}

a = new Thing()
a.whoIsThis()      // logs '> Thing {...}'

f = a.whoIsThis
f()                // logs '> Window {...}'

所以this不是第二次电话中的Thing 如何做this在这种情况下工作? 不是a.whoIsThis这是一个Thing的“方法”,不管它分配给它的任何变量?

当你说a.whoIsThis ,它只会引用功能对象。 函数对象将不会引用它所附加的对象。 但是,当你调用该函数,JavaScript的动态决定当前对象,并设置为this函数内。

这种动态性允许我们使用任何对象作为运行时中的当前对象。

但是,当你简单地调用一个函数对象,没有任何对象引用,默认情况下,JavaScript的将设置this为全局对象( window的浏览器对象),并在严格模式下, this将被设置为undefined

与其他语言相比,函数的此关键字在JavaScript中的行为略有不同。 在大多数情况下, 'this'的值取决于函数的调用方式,当'this'在函数内时。

1)当一个函数作为一个对象的方法被调用时,它被设置为调用该方法的对象。

2) 直接调用函数时, 调用不会设置此值。 由于代码不是严格模式,因此该值必须始终为对象,因此默认为全局对象。 在严格模式下,它的值保持在进入执行上下文时设置的任何值,因此'undefined'。

更多信息: https//developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this

此绑定在运行时决定,而不是在作者时间决定

f = a.whoIsThis这只是对WhoIsThis函数的另一个引用

现在想象一下如果你有在全局范围内声明的函数..这真的是现在的f ..当在运行时调用f JS时,运行该函数就像它在全局范围内声明一样(如我所提到的)所以它问.. this是指如果我在全局范围内=>默认绑定规则会回答.. this只是全局(窗口)对象

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM