gpt4 book ai didi

Javascript "this"范围根据调用方式给出不同的结果

转载 作者:数据小太阳 更新时间:2023-10-29 05:05:29 26 4
gpt4 key购买 nike

全部,

这是代码:

var Person = function (name) {

this.name = name;

this.printName = function(){
console.log("My name is " + this.name);
}

};


var p = new Person("Steve");

var funcRef = p["printName"];

p.printName();//Works

p["printName"]();//Works
funcRef();//returns incorrect value

在这里找到一个工作示例:http://plnkr.co/edit/57LS6oXPfqccAWf6uqQV?p=preview

我的问题是最后两个有什么区别?我以同样的方式访问对象方法,唯一的区别是它被调用的方式。

为什么会返回不同的结果?

我第一次在 javascript 中遇到这个问题。我知道它在不同的范围内,但我不知道它是如何与我想了解的对象分离的。

谢谢

史蒂夫

最佳答案

当你直接在对象上调用函数时,javascript 绑定(bind)this 关键字。

使用test.fn()this 将在fn 中被test。与 test['fn']() 相同。但是如果你这样做 var fn = test.fn; fn()this 将是 fn 中的全局根(浏览器中的 window)。

您可以像这样在函数中强制使用 this :var fn = test.fn.bind(test);

更多信息在这里:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this

关于Javascript "this"范围根据调用方式给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34271534/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com