0
目的:我的目標是調用clientData
對象的setUserName
方法,使屬性:fullName
設置爲適當的值。如何在不使用bind()的情況下爲另一個函數內部的函數設置「this」值?
我已經完成:我嘗試下面的代碼:
getUserInput.call(clientData,"My","Name",clientData.setUserName)
我認爲,通過這樣做,getUserInput()
函數內的this
值將被設置爲我的對象clientData
它做。此外,我認爲getUserInput(){}
內的所有代碼都可以訪問此修改後的this
值。因此,在思考過程中,我發現callback()
訪問的this
值也是clientData
。不幸的是,callback()
中的代碼仍在訪問值window
。我不懂爲什麼。
我的解決方法是將setUserName
綁定到clientData
。有沒有另一種方法來實現我的目標而不修改clientData
或getUserInput()
?
var clientData = {
fullName: "Not Set",
setUserName: function (firstName, lastName) {
this.fullName = firstName + " " + lastName;
}
};
function getUserInput(firstName, lastName, callback) {
callback(firstName, lastName);
}
getUserInput("My", "Name", clientData.setUserName.bind(clientData));
console.log (clientData.fullName);
console.log (window.fullName);
事情是,'這個'是爲每個單獨的函數調用**獨立設置的。使用'.bind()'是解決這個問題的好方法。你也可以將這個調用包裝在一個匿名函數中(這或多或少是''.bind()'爲你做的)。 – Pointy 2014-10-09 20:41:18
'.bind()'不是任何形式的魔法語法。這只是一個用'this'值(和參數,如果包含一些)綁定來創建新函數的方法。它對你給它的對象沒有影響。 – 2014-10-09 20:43:04