我目前正在测试javascript函数的方法。当我使用以下代码时:
var obj = {
"name" : "alice",
"test" : function(){return this.name}
}
obj.test()
> "alice"
一切都按预期工作,但当我使用apply方法时,我得到以下内容:
obj.test.apply(this,[])
> ""
任何人都可以解释为什么会这样吗?
答案 0 :(得分:3)
apply()更改上下文 可能是你传递的值,因为这个可能是Window对象 想象你正在调用Window.name
答案 1 :(得分:1)
你需要传递obj作为参考。 Working Fiddle
var obj = {
"name" : "alice",
"test" : function() {
return this.name
}
}
console.log(obj.test.apply(obj,[]));
同样,如果你需要模拟“呼叫”。然后
var obj = {
"name" : "alice",
"test" : function() {
return this.name
}
}
console.log(obj.test.call(obj));
答案 2 :(得分:0)
我其实只是想通了。
测试方法不应在全局环境中进行评估,而应在对象本身的本地环境中进行评估。只有这样,这个变量才能正确绑定,并且可以访问name属性。所以我实际上必须致电
obj.test.apply(obj,[])
答案 3 :(得分:0)
你正在传递这个里面的应用,这里这个指的是窗口和窗口没有测试方法。这将有效,因为您传递的是具有名称方法obj.test.apply(obj)的obj。不要混淆 obj.test ,它只是意味着你在调用obj的测试方法,而不是在obj的上下文中。