@Rapen

Какой принцип работы функции?

И так имеется функция, которая принимает один, и второй необязательный аргумент, первый Класс-конструктор, второй его аргументы, и по сути он возвращает его объект, есть вопрос, new (Class.bind.apply( Class, arguments )),
каким образом он получает его прототип, прошу помочь детально)
function construct(Class/*,arg*/) {
 return new (Class.bind.apply( Class, arguments ))()//    ???
}
function Class(name){ 

this.name = name;
}
Class.prototype.sayHello = function(){
  
  return 'Hello' + ' ' +  this.name;
  
}
var obj = construct(Class, 'Steve');

console.log(obj.name); // "Steve"
console.log(obj.sayHello()); // "Hello Steve"
  • Вопрос задан
  • 303 просмотра
Пригласить эксперта
Ответы на вопрос 1
mudrenokanton
@mudrenokanton
frontend dev
По сути весь этот костыль ничем не отличается от:
function construct(Class, name) {
  return new Class(name);
}

Но автор стал заложником абсолютно глупой идеи написать функцию construct, которая бы принимала не жестко закодированный аргумент. Потому он взял функцию Class и вызвал ее метод bind() через call(), для того что бы не перечислять аргументы через запятую, а просто указать их массивом. Эта функция bind вернула тело функции, которое потом и было вызвано в качестве конструктора с new
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы