2016-08-02 15 views
0

通知変数の値を変数値にバインドしないのはなぜですか?また、なぜあなたはme = {'name': 'Rob2'};を実行すると、これは完全に新しいオブジェクトを作成し、me変数にそれを代入warrior.bind({'name': 'Rob3'}, 'ninja')通知更新を変数にバインドしないのはなぜですか?

function warrior(kind){ 
    console.log(this.name); 
} 

var me = {'name': 'Rob'}  
var ninja = warrior.bind(me, "ninja"); 
ninja(); 
me = {'name': 'Rob2'}; 
ninja(); 

答えて

1

のような未確認変数を受け入れ結合しません。 ninja関数はまだ古いmeにバインドされています。

me.name = 'Rob2'; 

問題ありませんが、これは私の作品、warrior.bind機能で、オブジェクトリテラルを使用しているが、あなたが望むものを確認してください。代わりに、あなたはこのように、同じオブジェクトを保持するが、唯一、そのプロパティを変更する必要があります後でオブジェクトを変更することができます。

+0

ya私の間違いは2番目の部分ですが、今すぐ動作します。私はちょうど間違ってそれを入力しているに違いない。 – Rob

1

実際には、新しいオブジェクトを作成し、この新しく作成されたオブジェクトの参照を変数meに割り当てます。新しいオブジェクトを作成するのではなく、引き続きバインディングを使用する場合は、プロパティを更新する必要があります。

function warrior(kind){ 
    console.log(this.name); 
} 

var me = {'name': 'Rob'}  
var ninja = warrior.bind(me, "ninja"); 
ninja(); 
me.name = 'Rob2'; // Do not create new object. Update already existing one. 
ninja(); 
関連する問題