所有,
这是代码:
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中遇到过这个问题.我知道这是在一个不同的范围,但我不知道它是如何与我想要了解的对象分离.
谢谢
史蒂夫
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