我对这段代码有疑问。
var names = ["John", "Jen", "Tony"];
var obj = {
prob: function () {
for (var i = 0; i < names.length; i++) {
document.write(names[i]);
console.log(names[i]);
}
},
trim: names.forEach(function(name) {
document.write(name)
console.log(name)
})
}
console.log("*********")
console.log(obj.prob());
console.log("*********")
如果我在我的控制台中运行此代码,我会得到这个:
John
Jen
Tony
*********
John
Jen
Tony
undefined
*********
这意味着在我的prob函数之前,我调用我的trim函数运行。这是为什么?我没有打电话给它?我可以将它保存为对象上的方法,并在以后需要时调用它吗?
答案 0 :(得分:8)
调用names.forEach
尝试将返回值分配给trim
。把它放在一个函数中应该可以工作。
var names = ["John", "Jen", "Tony"];
var obj = {
prob: function () {
for (var i = 0; i < names.length; i++) {
document.write(names[i]);
console.log(names[i]);
}
},
trim: function () {names.forEach(function(name) {
document.write(name)
console.log(name)
})}
}
console.log("*********")
console.log(obj.prob());
console.log("*********")
console.log(obj.trim());
&#13;
答案 1 :(得分:1)
obj.prob
被分配了一个函数声明,并且不是被调用。
obj.trim
设置对函数forEach
的调用。
这意味着当您分配给属性时,您也会导致代码运行 (当您实例化obj
对象时会发生这种情况,这解释了名称的初始记录)
将forEach
的调用包装到匿名函数声明中(就像使用prob
属性的for循环一样):
var names = ["John", "Jen", "Tony"];
var obj = {
prob: function () {
for (var i = 0; i < names.length; i++) {
document.write(names[i]);
console.log(names[i]);
}
},
// the code in this function block will only run
// when trim is invoked
trim: function(){
names.forEach(function(){
document.write(name);
console.log(name)
});
}
};
答案 2 :(得分:0)
您只需将each
功能包含在function
var names = ["John", "Jen", "Tony"];
var obj = {
prob: function () {
for (var i = 0; i < names.length; i++) {
document.write(names[i]);
console.log(names[i]);
}
},
trim: function(){ names.forEach(function(name) {
alert();
document.write(name)
console.log(name)
})}
}
console.log("*********")
console.log(obj.prob());
console.log("*********")