根据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'])
有效?无法得到它。
答案 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
的成员。如果那来自一本书那就是一个错字。