2011-09-08 3 views
0

を参照するには、私のコードの(非常に)単純化したバージョンです。私は多かれ少なかれ、thisがある関数から別の関数にコンテキストを変更することを理解していますが、私のインクリメント関数(と他の関数)は、クロージャの魔法によって、これが想定されているものを "思い出す"でしょう。JavaScriptのオブジェクトの機能は、ここではそのフィールド

私はこれをすべて削除し、単純に関数を参照してみました。それも失敗しました。

これらの機能はどのように見えるのですか?

答えて

3

JavaScriptでthisの内容に頼ることはできません。 More on this topic

OOP言語のようなプライベート属性を導入したいと思うかもしれません。 John Resig described this issue very well

function Field(val){ 
    var value = val; 

    this.getValue = function(){ 
     return value; 
    }; 

    this.setValue = function(val){ 
     value = val; 
    }; 
} 

var field = new Field("test"); 
field.value 
// => undefined 
field.setValue("test2") 
field.getValue() 
// => "test2" 

JavaScriptはJava、C++、PHPなどの従来の言語とは大きく異なります。しかし、あなたはそれに慣れることができます:) this変更は、あなたがこれを行うことができ事例で

+0

私はゆっくりとしかし確実にそれに慣れています。それが本当に美しい言葉です。 –

+0

私はこのタイプのアプローチから離れる傾向があります。私は自分自身をJavaScriptの純粋主義者と見なしています。JavaScriptはプライベート変数などを作成する能力を持っていますが、パフォーマンスやメモリの使用を犠牲にしています。 – Jeremy

1

function() { obj.display(); } 

例:

代替がfooを変更することです
var obj = new Ctor(); 

function foo(fn) { 
    fn(); 
} 

foo(function() { 
    obj.display(); 
}); 

()に次のように関数を実行するためのコンテキストを受け入れる:

function foo(fn, context) { 
    fn.call(context); 
} 
+0

作業例:http://jsfiddle.net/6aGWg/ – Jeremy