2016-06-18 10 views
0
var App = { 
    method : function (value, callback) { 
    console.log(value); 
    if (typeof callback === 'function') { 
     //here 
     callback.call(this); 
    } 
    } 
} 

App.method('Hey there', function(){ 
    console.log('callback was executed!'); 
}); 

なぜコールバック()はできないのですか?コールバックのために(this)コールする必要がありますか?オブジェクトのリテラルパターンのコールバックとこの混乱

+1

あなたは何を求めているのかわからない 'callback()'を行うことができます... – elclanrs

答えて

0

あなたが単にコールバックを呼び出した場合は、供給しているコールバック関数の特定の場合には、それは問題ではないが:

callback(); 

落札ので、あなたのコールバックコードは、まったくthisを参照していませんどのような価値があるのか​​違いはありません。コールバックがAppオブジェクトの他の部分を参照したかっ

場合しかし、その後callback.call(this)で起動するthisがコールバックでAppを指すことを保証するであろう。例:このコードでは

var App = { 
    method : function (value, callback) { 
    console.log(value); 
    if (typeof callback === 'function') { 
     //here 
     callback.call(this); 
    } 
    }, 
    property: "HELLO WORLD" 
} 

App.method('Hey there', function(){ 
    console.log('callback was executed! Property value is: ' + this.property); 
}); 

thisは、オブジェクトのプロパティにアクセスするconsole.log()コールためにAppを参照する必要があります。 .call()を使用すると、そのことが保証されます。

1

簡単に言えば、あなたはそうする必要はありません。あなたのコールバック関数がそのコンテキストを "App"オブジェクトにしない限り、たとえば:

// Regular callback: 
 
var App = { 
 
    method : function (value, callback) { 
 
    if (typeof callback === 'function') { 
 
     callback(); 
 
    } 
 
    } 
 
} 
 

 
App.method('Hey there', function(){ 
 
    console.log(
 
    'A regular callback was executed!', 
 
    'And its context is Window:', 
 
    this === window 
 
); 
 
}); 
 

 

 
// Context modified callback: 
 
var App = { 
 
    method : function (value, callback) { 
 
    if (typeof callback === 'function') { 
 
     callback.call(this); 
 
    } 
 
    } 
 
} 
 

 
App.method('Hey there', function(){ 
 
    console.log(
 
    'A context modified callback was executed!', 
 
    'And its context is App:', 
 
    this === App 
 
); 
 
});

私はそれが役に立てば幸い!

関連する問題