我是JavaScript的新手,所以只是学习“this”指针,我尝试使用apply()来更改对象的上下文,我在NodeJS REPL中运行代码,输出未定义,未定义。
var word="Hello";
var obj={word:"GB"};
function foo(){return this.word;}
console.log(foo());
foo.apply(obj);
console.log(foo());
我在chrome浏览器中运行相同的内容,它输出Hello和Hello,使用apply(),输出应该是Hello和GB。
我对此用法感到困惑。 请帮忙。
答案 0 :(得分:1)
console.log
使用Function.apply
调用函数后的值,因为在使用this
调用函数时提供.apply(CONTEXT)
上下文。
foo.apply(obj);
不会保存this
invokation
的{{1}}的{{1}}上下文
foo
您可以使用var word = "Hello";
var obj = {
word: "GB"
};
function foo() {
return this.word;
}
console.log(foo());
console.log(foo.apply(obj));
并将引用保留在变量中,以便引用的函数始终具有.bind
binded-context
答案 1 :(得分:0)
foo.apply(obj)
确实返回" GB",但您将foo()
传递给console.log
也许您误将apply
误认为是bind
?
console.log(foo()); // World
foo = foo.bind(obj);
console.log(foo()); // GB
或你的方式:
console.log(foo.apply(obj)); // GB