不应用返回返回值

时间:2014-07-28 10:59:36

标签: javascript object

我目前正在测试javascript函数的方法。当我使用以下代码时:

var obj = {
 "name" : "alice",
  "test" : function(){return this.name}
}

obj.test()
> "alice"

一切都按预期工作,但当我使用apply方法时,我得到以下内容:

obj.test.apply(this,[])
> ""

任何人都可以解释为什么会这样吗?

4 个答案:

答案 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的上下文中。