考虑:
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
不是{{1}}的“方法”而不管其分配给哪个变量?
答案 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)对象