這可能是新手入門的典型問題。我研究了一些類似的問題,但無法解釋我所看到的行爲。如何在函數調用中解析'this'關鍵字
下面的代碼應該說明我正在嘗試做什麼。我有2個對象MyObjectA和MyObjectB。
MyObjectB有一個簡單地記錄消息的方法echo
。它將this.name
添加到消息中,試圖知道誰在執行該方法。它還打印出this
的值。
MyObjectA有一個名爲callAFunctionWithMessage
的方法,它正是這樣做的。它接受一個消息和一個函數並調用它。
在全局範圍內,對象被實例化和調用。我看到的是this.name
是undefined
。當在瀏覽器中執行時,this
的值爲DOMWindowObject
,而在nodejs中執行時,則有一些類似大型基礎設施的對象。有人能幫助我對這種行爲有所瞭解嗎?鑑於MyObjectA正在調用echo,我預計'this'指向MyObjectA。
我也是,執行MyObjectB.echo('hello')
其中this
按預期指向MyObjectB。
function MyObjectA(name) {
this.name=name;
}
MyObjectA.prototype = {
name : "",
callAFunctionWithMessage: function (msg, callback) {
callback(msg);
}
}
function MyObjectB(name) {
this.name = name;
}
MyObjectB.prototype = {
name :"",
echo: function(msg) {
var messageToPrint='[from '+this.name+']'+msg;
console.log(messageToPrint, " : " + this);
}
}
var a = new MyObjectA("ObjA");
var b = new MyObjectB("objB");
a.callAFunctionWithMessage('hello from A!', b.echo);
// => [from result]hello from A! : [object Window]
b.echo('hello!');
// => [from objB]hello! : [object Object]
謝謝你一起。通過回調這個回調是一個好主意。 –