Javascript 为什么我需要为一个原型方法调用声明变量,而不是为另一个原型方法调用声明变量?
我在这里使用相对简单的代码:Javascript 为什么我需要为一个原型方法调用声明变量,而不是为另一个原型方法调用声明变量?,javascript,arrays,Javascript,Arrays,我在这里使用相对简单的代码: Array.prototype.doubleAll = function () { output = []; for (var i = 0; i < this.length; i++) { output.push(this[i] * 2); } return output; }; console.log([1,2,3].doubleAll()); Array.prototype.myEach = function (fun) {
Array.prototype.doubleAll = function () {
output = [];
for (var i = 0; i < this.length; i++) {
output.push(this[i] * 2);
}
return output;
};
console.log([1,2,3].doubleAll());
Array.prototype.myEach = function (fun) {
output = [];
for (var i = 0; i < this.length; i++) {
output.push(fun(this[i]));
}
return output;
};
a = [1,2,3];
a.myEach(function (num) {
console.log(num);
});
失败了,但是
[1,2,3].doubleAll()
及
两者都有效
编辑:
在[1,2,3]而不是在变量a(=[1,2,3])上调用myEach时返回的错误为
有人能向这个新手解释一下是什么导致了这种情况吗?我不知道你有什么错误,但我在node.js上试过,效果很好:
Array.prototype.doubleAll = function () {
var output = [];
for (var i = 0; i < this.length; i++) {
output.push(this[i] * 2);
}
return output;
};
console.log([1,2,3].doubleAll());
Array.prototype.myEach = function (fun) {
for (var i = 0; i < this.length; i++) {
fun(this[i]);
}
};
[1,2,3,4,5].myEach(function (num) {
console.log(num);
});
Array.prototype.doubleAll=函数(){
var输出=[];
for(var i=0;i
当然,在myEach中不需要“output”var,因为您不返回任何内容,而是调用函数。第二个问题是,您必须为输出添加“var”,否则它将成为一个全局var,并且可能会出现意外的pugs。函数中未声明输出,将创建一个窗口。输出将被创建,但代码按原样工作:
Array.prototype.myEach = function (fun) {
var output = [],i;
for (i = 0; i < this.length; i++) {
output.push(fun(this[i]));
}
return output;
};
[1,2,3].myEach(function (num) {
console.log(num);
});
Array.prototype.myEach=函数(fun){
var输出=[],i;
对于(i=0;i
扩展本机对象,但如果您的代码永远不会使用第三方库运行,那么就不必太担心了。您希望[1,2,3]的输出是什么。myEach(…)和a.myEach(…)如何失败?它给出了什么错误?请在上为我们创建一个演示,以便我们重现问题。此外,在声明变量时请使用
var
关键字。否则,您的代码可能会出现意外问题。
[1,2,3].myEach(function (num) {
^
TypeError: Cannot call method 'myEach' of undefined
Array.prototype.doubleAll = function () {
var output = [];
for (var i = 0; i < this.length; i++) {
output.push(this[i] * 2);
}
return output;
};
console.log([1,2,3].doubleAll());
Array.prototype.myEach = function (fun) {
for (var i = 0; i < this.length; i++) {
fun(this[i]);
}
};
[1,2,3,4,5].myEach(function (num) {
console.log(num);
});
Array.prototype.myEach = function (fun) {
var output = [],i;
for (i = 0; i < this.length; i++) {
output.push(fun(this[i]));
}
return output;
};
[1,2,3].myEach(function (num) {
console.log(num);
});