Ste*_*tes 6 javascript scope this
所有,
这是代码:
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
Run Code Online (Sandbox Code Playgroud)
在这里找到一个有用的例子:http://plnkr.co/edit/57LS6oXPfqccAWf6uqQV?p = preview
我的问题是最后两个之间有什么区别?我以相同的方式访问对象方法,唯一的区别是它被调用的方式.
为什么会返回差异结果?
我第一次在javascript中遇到过这个问题.我知道这是在一个不同的范围,但我不知道它是如何与我想要了解的对象分离.
谢谢
史蒂夫
this当你直接在对象上调用函数时,javascript绑定关键字.
随着test.fn(),this将在test里面fn.与...相同test['fn']().但如果你这样做var fn = test.fn; fn(),this将成为全局根(window在浏览器中)fn.
你可以强制this内部这样的函数:var fn = test.fn.bind(test);
更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this