javascript'这个'分配"方法时的绑定工作"到另一个变量?

时间:2014-05-23 03:51:29

标签: javascript this

考虑:

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未绑定到第二次调用中的Thingthis如何在这种情况下工作? a.whoIsThis Thing不是{{1}}的“方法”而不管其分配给哪个变量?

3 个答案:

答案 0 :(得分:2)

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

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

但是当你只调用一个没有任何对象引用的函数对象时,默认情况下,JavaScript会将this设置为浏览器中的全局对象(window对象),并且在严格模式下{{1 }}将设置为this

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

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

具有f = a.whoIsThis只是对功能WhoIsThis

的另一个引用

现在想象一下,如果您在全局范围中声明了该函数,那么。{实际上就是f ..并且在运行时调用f JS时,就像在声明时一样运行该函数因此,它会询问..what this是指我是否在全局范围内=>默认绑定规则会回答..这只是global(window)对象