如何使用javascript';s';这';在分配“文件”时进行装订工作;方法“;到另一个变量?

如何使用javascript';s';这';在分配“文件”时进行装订工作;方法“;到另一个变量?,javascript,this,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 {...}' 因此,这个没有绑定到

考虑:

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 {...}'

因此,
这个
没有绑定到第二次调用中的
对象。在这种情况下,
这个
是如何工作的?这不是
a.who这是
事物的“方法”吗
不管它分配给什么变量?

当你说
a.who这是
时,它只会引用函数对象。函数对象将不会引用其所附着的对象。但是当您调用函数时,JavaScript会动态地决定当前对象,并将其设置为函数内部的
this

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


但是,当您只调用函数对象时,默认情况下,JavaScript会将
this
设置为全局对象(浏览器中的
window
对象),并处于严格模式,
将设置为
未定义

函数的this关键字在JavaScript中的行为与其他语言稍有不同。在大多数情况下,“this”的值取决于调用函数的方式,当“this”位于函数内部时。

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

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


更多信息:

此绑定在运行时决定,而不是在编写时决定

拥有
f=a.whoithis
只是对whoithis函数的另一种引用


现在想象一下,如果您在全局范围内声明了函数..这就是现在的
f
因此,它会问..如果我在全局范围内,这个
指的是什么=>默认绑定规则将回答..它只是在调用函数时设置了全局(窗口)对象

上下文
a.whoithis
只返回函数,它没有任何上下文。如果它说的是window,那么它肯定很奇怪。这是不寻常的,因为我总是听说“函数在定义它们的范围内”@Markasoftware这并不奇怪。在全局上下文中,
的值为
窗口
。你必须做
a.f()
才能用不同的上下文调用它。所以这是上下文,而不是范围,这些是不同的东西?我认为
这个
在。更不用说关于“这个”话题的其他一千个问题了(见右栏)。啊,我明白了。从字面上看,函数调用的“上下文”决定了这个
将要做什么be@ChaseMeadors:是的。
的值由调用函数的方式决定(除非它通过
.bind
绑定到特定值)。