【问题标题】:`apply` doesn't work for function as object's property`apply` 不适用于作为对象属性的函数
【发布时间】:2012-02-12 10:09:32
【问题描述】:

根据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']) 不起作用?收不到。

【问题讨论】:

    标签: javascript function object properties apply


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      ob.fn.apply(...);
      

      如果你想要定义 fn,你可以简单地设置它:

      var ob,
          fn;
      
      ob = {
        fn:function(){...}
      };
      fn = ob.fn;
      
      fn.apply(ob, ...);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-01
        • 2019-10-12
        • 1970-01-01
        • 1970-01-01
        • 2018-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多