Javascript js中的属性
为什么属性在{}之后未定义?如何修复它Javascript js中的属性,javascript,node.js,Javascript,Node.js,为什么属性在{}之后未定义?如何修复它 function GitMetrics() { var arr = ["qwer", "asdf"]; arr.forEach(function(item) { this[item] = 1; var e = this.qwer; //1 }); var t = this.qwer; //undefined } exports.GitMetrics = GitMetrics; 有两种选择: 1使用fat箭头(需要ES6)
function GitMetrics() {
var arr = ["qwer", "asdf"];
arr.forEach(function(item) {
this[item] = 1;
var e = this.qwer; //1
});
var t = this.qwer; //undefined
}
exports.GitMetrics = GitMetrics;
有两种选择:
1使用fat箭头(需要ES6)
2将此作为参数传递
arr.forEach(function(item) {
this[item] = 1;
var e = this.qwer; //1
}, this);
我在变量tmp中保存对该变量的引用
function GitMetrics() {
var arr = ["qwer", "asdf"];
var tmp = this;
arr.forEach(function(item) {
tmp[item] = 1;
var e = tmp.qwer; //1
});
var t = this.qwer; //1 it works
}
exports.GitMetrics = GitMetrics;
因为
this
每次都指向不同的对象。例如,使用胖箭头语法进行回调。完全理解-以至于不必再考虑它,“this”的上下文是Javascript最伤脑筋的地方之一。我建议你读清楚一点@Sirko有一个简单的解决方法——不要声明“real”函数,而是使用=>()语法将“this”的上下文保持在您想要的范围内,而不是函数范围内,这正是您现在要做的。纯代码答案是不可接受的——请提供解释。另外,请正确格式化代码。
function GitMetrics() {
var arr = ["qwer", "asdf"];
var tmp = this;
arr.forEach(function(item) {
tmp[item] = 1;
var e = tmp.qwer; //1
});
var t = this.qwer; //1 it works
}
exports.GitMetrics = GitMetrics;