Использование function.call с этим аргументом для аргументов функции - PullRequest
0 голосов
/ 06 октября 2018

У меня есть простой пример ниже, который создает конструктор Object.Существует метод add, который пытается перебрать коллекцию arguments, вызвав метод Array.prototype.forEach.

Техника работает, но у меня проблема со значением this.

Я прибег к хитрости присвоения this действительной переменной (This), используя реальное значение во внутренней функции.Это работает, но я думаю, что это должно быть проще.

Согласно https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call, я должен быть в состоянии вызвать это с необязательным thisArg в начале.Я пробовал это в add2 методе. не работает .

Как правильно включить новое значение для аргумента this в метод call?

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)

1 Ответ

0 голосов
/ 06 октября 2018

forEach принимает необязательный параметр для this, который будет использоваться внутри обратного вызова.Это хороший вариант, если вы не можете использовать функции стрелок:

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)
...