Javascript,这个指针在浏览器和控制台上返回不同的值

时间:2016-06-16 07:15:21

标签: javascript this

我是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。

enter image description here

我对此用法感到困惑。 请帮忙。

2 个答案:

答案 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