javascript - 将 function.call 与此参数一起用于函数参数

标签 javascript arrays arguments this

我在下面有一个创建对象构造函数的简单示例。有一个 add 方法尝试通过调用 Array.prototype.forEach 方法遍历 arguments 集合。

该技术有效,但我对 this 值有疑问。

我采用了将 this 赋值给一个真实变量 (This) 的技巧,并在内部函数中使用了真实值。这行得通,但我认为它应该更简单。

根据 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call ,我应该能够在开头使用可选的 thisArg 来调用它。我已经在 add2 方法中试过了。这行不通

call 方法中为 this 参数包含新值的正确方法是什么?

function Collection() {
  this.data=[];
}
Collection.prototype={
  constructor: Collection,
  add() {
    var This=this;
    Array.prototype.forEach.call(arguments,function(value) {
      This.data.push(value);
    });
  },
  add2() {
    Array.prototype.forEach.call(this,arguments,function(value) {
      this.data.push(value);
    });
  },
}

var c=new Collection();
c.add('apple','banana');
alert(c.data)

最佳答案

forEachthis 获取一个可选参数,它将在回调中使用。如果您不能使用箭头功能,这应该是一个不错的选择:

function Collection() {
    this.data=[];
  }
  Collection.prototype={
    constructor: Collection,
   
    add2() {
      Array.prototype.forEach.call(arguments,function(value) {
        this.data.push(value);
      }, this); // <= pass this in to forEach
    },
  }
  
  var c=new Collection();
  c.add2('apple','banana');
  console.log(c.data)

关于javascript - 将 function.call 与此参数一起用于函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52675006/

相关文章:

java - 将 javascript Web 应用程序链接到 java

java - 从存储导入文件时出现 FileNotFoundException (Android Studio)

python - 如何为每列使用不同的默认值初始化 NumPy 结构化数组?

javascript - 为什么 JavaScript 参数有 length 属性而其他对象没有?

ruby-on-rails - 参数数量错误 [ex :(3 for 2)] in methods [but only pass 2]

c++ - 有没有办法检查发送到变量的值是否是正确的类型,而它已经在该变量下?

javascript - 在闭包中保存值(value)

javascript - 如何在tinymce文本区域中输入字符时将字符附加到文本框,直到按ENTER键?

javascript - 使用 jQuery 在 div onClick() 中隐藏 img 标签

java - 如何在 Java 中将 powerSet 的内容保存到二维数组中