【发布时间】:2014-02-26 17:05:36
【问题描述】:
我一直在玩 Javascript 回调,了解围绕“this”的范围问题以及如何通过使用“call”或“apply”并传入对象引用来消除它。
但是,我发现了一些东西,我想知道以下是否是不好的做法?因为它通过纯粹使用对象名称而不是“this”来消除范围问题。假设我有一个具有回调的函数,例如:
function getUserInput(firstName, lastName, callback) {
callback(firstName, lastName);
}
还有一个像这样的对象:
var clientData = {
id: 1,
fullName: "Not Set",
setUserName: function (firstName, lastName) {
//this.fullName = firstName + " " + lastName;
clientData.fullName = firstName + " " + lastName;
}
}
要执行并查看代码的输出,我执行以下操作:
getUserInput("Ann", "Other", clientData.setUserName);
console.log(clientData.fullName);
这给了我“Ann Other”。完美的!而如果我取消注释“this.fullName”行并注释掉“clientData.fullName”,我会得到“Not Set”,window.fullName 会包含“Ann Other”(“this”的传统范围问题是附加到全局窗口)。
当然,这是一个原始示例,但这是不好的做法吗?现在这意味着我在访问回调函数中的本地属性时从来没有遇到过问题。我也不需要使用“调用”或“应用”函数并传入对象引用,这样我就可以在正确的范围内访问“this.propertyName”。任何答案将不胜感激。
【问题讨论】:
标签: javascript callback scope this