`apply`不适用于作为对象属性的函数

时间:2012-01-17 15:41:54

标签: javascript function object properties apply

根据JavaScript Patterns book(第79页),这应该有效:

 var ob = {
    fn: function foo(m) {alert(m);}
 };
 fn.apply(ob,['m']);

它不起作用。

抛出

fn is not defined错误。

这两项工作正常:

ob.fn.apply(ob,['m']);

ob.fn.apply(null,['m']);

为什么不只是fn.apply(ob,['m'])有效?无法得到它。

2 个答案:

答案 0 :(得分:4)

fn不起作用,因为它不是范围内的变量。如果定义了window.fn,或者在其他地方定义了var fn,那么您就可以fn.apply访问它。由于这些都没有定义,因此您需要使用对象上函数的完整路径:

ob.fn.apply(...);

如果想要定义 fn,您只需设置它:

var ob,
    fn;

ob = {
  fn:function(){...}
};
fn = ob.fn;

fn.apply(ob, ...);

答案 1 :(得分:4)

fn未在全局范围内定义。它是ob的成员。如果那来自一本书那就是一个错字。