@Jiakki-js

Что происходит когда вызываешь Object.apply(this ) в конструкторе «класса»?

Что происходит когда вызываешь Object.apply(this ) в конструкторе "класса" ?
например

function AnyClass () {
Object.apply(this, arguments) // или Object.apply(this ) 
}

AnyClass.prototype = Object.create(Object.prototype)


Можна ли пример ? Спасибо)
  • Вопрос задан
  • 249 просмотров
Решения вопроса 1
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
В вашем примере ничего не происходит. Если бы вы написали:

function AnyClass () {
	return Object.apply(this, arguments);
}
console.log(new AnyClass({'a': 3, 'b': 7}));
console.log(new AnyClass(5));
console.log(new AnyClass(true));
console.log(new AnyClass('test'));

То получили бы создание объектов разного типа.

А поскольку вы просто вызвали функцию Object, она выполнилась, получив в this ссылку на создаваемый объект и всё. Результат её выполнения вы не используете нигде.

А вот это я так и не смог понять:) По мне, так это — масло масляное

AnyClass.prototype = Object.create(Object.prototype);
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Думаю, этот код выдран откуда-то вами, но могу предположить вот что. Есть у вас обычный "класс".

var X = function() { }
X.prototype = {}

Инициализировать вы его будете вот так: var x = new X(arg1, arg2, arg3, ...), что не всегда удобно. Можно, например, вот так: var x = make(X, [arg1, arg2, arg3]).

Для этого можно сделать обертку:

var make = function(maker, args) {
    var X = function() {
        maker.apply(this, args);
    }
    X.prototype = maker.prototype;
    return new X();
}
Ответ написан
Комментировать
keksmen
@keksmen
Just a programmer
По факту - обычное наследование.
Чтото.apply(this);
Внутри конструктора класса выполнит конструктор другого класса в контексте текущего.
Что же до Object, то я без понятия, что творится у него внутри.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час