我试图使用置于函数内的变量。我不打算对这段代码做任何特别的事情,但我想弄清楚为什么绑定/应用/调用对象而不是函数。
function another () {
this.var = 'another test'
}
function test (){
this.var = 'test123'
console.log('this.first: ',this.var);
}
var bind = test.bind(another);
console.log('bind: ', bind());
答案 0 :(得分:3)
.bind()
适用于各种功能。它只是不按照你的想法做到。
看,函数也是对象。将它们视为对象并不意味着它们会被调用。
function a() { console.log("a was called"); }
function b() { console.log(this); }
var bound = b.bind(a);
bound(); // logs "function a() { }" in my console
在您的情况下,一旦您将test
绑定到another
,就会有一个新功能,就像test
一样,但this
表示{{1}因此another
表示this.var
。所有这一切都发生在没有another.var
被称为的情况下。
我不完全确定你的代码是如何工作的,因为它没有多大意义。但如果你在运行之后检查一下,你会发现another
现在的值为another.var
。
即使你事先说过'test123'
,也没关系。首先,因为another()
没有绑定任何东西,所以another
表示全局对象。在浏览器中,this
基本上只是设置another()
。但其次,window.var
设置了自己的值 - 所以即使两个函数对test
的含义有相同的概念,this.var
也会用test
覆盖它。
答案 1 :(得分:1)
这将记录“另一个测试”,因为this
默认为window
:
function another() {
this.foo = 'another test';
}
another();
console.log(window.foo);
编辑:
// define function object window.first:
function first() {
this.foo = 'first';
}
// define function object window.second:
function second() {
this.foo = 'second';
}
// call window.first, sets window.foo to 'first':
first();
// set window.bound to a new function object which
// runs second in the context of the object first:
var bound = second.bind(first);
// call window.bound, which sets window.first.foo to 'second':
bound();
// call second, which sets window.foo to 'second' then logs the return
// value of second, which is undefined:
console.log('second: ', second());