2016-05-07 5 views
0

時間の後に値を設定しようとしています。機能JavaScriptがタイムアウト関数に変数を渡す

setTimeout(function() { 
    console.log('hello'); 
    this.list[this.listIndex].glamour.show = true;   
}, 1000); 

に私はVueJSメソッド内だと私はVueJSテンプレートのプロパティにアクセスしようとしているとき、私は変数にアクセスすることはできませんいくつかの理由

。私はあなたが現在のオブジェクトを参照する変数を作成する必要が任意の入力

+3

この関数の 'this'の値は、最終的にタイマーが起動したときの周囲のコードと同じではありません。 'this'をタイマー関数の外の別のローカル変数に保存し、' this'の代わりにその変数を使用することができます。 – Pointy

答えて

3

のために進め

ありがとう:

var self = this; 
setTimeout(function() { 
    console.log('hello'); 
    self.list[self.listIndex].glamour.show = true; 
}, 1000); 
+0

それは、感謝の男が動作します。私はvar self = thisを見たことがありません。前!!! –

0

thisは、あなたが関数を呼び出し、そこからオブジェクトを参照します。デフォルトでは、ウィンドウオブジェクトに設定されています。

function sayHello() { 
    alert("Hello, I'm " + this.nickname + "."); 
} 
function make (nickname) { 
    return { 
     nickname: nickname, 
     sayHello: sayHello 
    }; 
} 
bob = make("Bob"); 
jim = make("Jim"); 
nickname = "Window"; 
bob.sayHello(); /////////////// alerts "Hello, I'm Bob." 
jim.sayHello(); /////////////// alerts "Hello, I'm Jim." 
sayHello(); /////////////////// alerts "Hello, I'm Window." 
window.sayHello(); //////////// alerts "Hello, I'm Window." 
setTimeout(sayHello, 0); ////// alerts "Hello, I'm Window." 
setTimeout(bob.sayHello, 0); // alerts "Hello, I'm Window." 

この動作を回避するには、少なくとも2つの可能性があります。

// a closure 
setTimeout(function() { bob.sayHello(); }, 0); 
関連する問題