Pull to refresh

Comments 10

Не совсем понятна идея зачем он был нужен

Вызов статических методов инстанса


class Test {
    constructor(a) {
        this.a = a;
    }

    static log(str) {
        console.log(str);
    }

    logA() {
        this.constructor.log(this.a);
    }
}

(object => {
    object.logA();
    object.constructor.log('456');
})(new Test('123'));
это имеет больше смысла чем клонирование объекта
спасибо, хорошо хоть одним вопросом меньше)

Не только.
Object.create появился только в es6.


А до него было необходимо ручками работать.

А какое отношение Object.create имеет к свойству constructor?

Был не прав.


Вспоминал как устроено наследование.
Переопределять конструктор нужно и при использовании Object.create.

В последнюю строку custom_new вкралась ошибка! Если constructor вернёт примитивное значение (не объект), результатом custom_new должен быть self. Кстати, оный self лучше через Object.create, строкой меньше.

спасибо за уточнение
поправил в статье
constructor – это ссылка на функцию, с помощью которой был создан объект:

Конструктор не всегда указывает ну функцию, с помощью которой он был создан

function Foo() {
	
}

function Bar() {

}

Bar.prototype = Foo.prototype;

var foo = new Foo();
var bar = new Bar()

console.log(bar.constructor); // Foo


Интересный кейс
Да, constructor это вообще writable свойство, поэтому его можно переопределить просто в лоб:
foo.constructor = bar.constructor;

поэтому полагаться на него не лучшая идея
Sign up to leave a comment.

Articles