Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我需要为一个原型方法调用声明变量,而不是为另一个原型方法调用声明变量?_Javascript_Arrays - Fatal编程技术网

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);
});