Так что это сложно.При непосредственном вызове метода это относится к содержащему объекту, в то время как при вызове преобразования строки это относится к «окну» (я верю, что я все еще могу быть совершенно неправым).
Может ли кто-нибудь объяснить мне это?
Что произойдет, это ошибка javascript ПОСЛЕ первого оператора оповещения (это означает, что прямой вызов работал нормально, как было определено _this
)
/**
* converts a string to a function
*/
function stStringToFunction(string) {
var fnList = string.split(".");
var currentFn = window;
var nextFn;
while(currentFn !== undefined && (nextFn = fnList.shift())) {
currentFn = currentFn[nextFn];
}
return currentFn;
}
//An example library
UnderstandingThis.ui.Component1 = {
performTask1: function(options) {
var settings = {
opt1: true,
opt2: false
},
_this = this;
$.extend(settings, options);
_this._PrivateTask1(settings);
},
_PrivateTask1: function(settings) {
//Some sweet stuff here!
alert("Private task1: " + settings.from);
}
}
UnderstandingThis.ui.Component1.performTask1({from: "direct"});
stStringToFunction("UnderstandingThis.ui.Component1.performTask1")({from: "string-to-function"});
Требуется отсутствие объясненияредактирование: 21.02.2012 9:56 (Монтана)
Итак, проблема в том, что библиотека faux (UnderstandingThis.ui.Component1
) содержит функцию, которая использует _this
(которая установлена на this
) и работает нормально при прямом вызове метода.Под этим я подразумеваю в вызове javascript UnderstandingThis.ui.Component1.performTask1()
.Но если я вызываю эту же задачу через преобразование строки, stStringToFunction("UnderstandingThis.ui.Component1.performTask1")()
_this
ссылается на window
.Но для меня это не имеет смысла.Я работаю с JavaScript только 1,5 года, и эти маленькие нюансы (исходящие из Java / C #) трудно понять.