2012-01-17 6 views
1

JavaScript Patterns book(頁79)によると、これは動作するはずです:`apply`は、オブジェクトのプロパティとしての機能は動作しません

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

それは動作しません。

fn is not definedエラーがスローされます。

これら2作業OK:

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

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

なぜだけではなくfn.apply(ob,['m'])動作しますか?それを得ることはできません。

答えて

4

fnは、範囲内の変数ではないため機能しません。 window.fnが定義されている場合、またはvar fnが他の場所で定義されている場合は、fn.applyとしてアクセスできます。これらのどちらが定義されているので、あなたがオブジェクトの機能への完全なパスを使用する必要があります:あなたは FNを定義したい場合

ob.fn.apply(...); 

、あなたは単にそれを設定できます

var ob, 
    fn; 

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

fn.apply(ob, ...); 
4

fnはグローバルスコープでは定義されていません。メンバーはobです。それが本から来たのであれば、それはタイプミスです。

関連する問題