Конструкторы JavaScript - PullRequest
       7

Конструкторы JavaScript

4 голосов
/ 21 ноября 2010

Я пытаюсь получить контроль над конструкторами javascript и действительно ли они доступны только для чтения.Вот простой сценарий тестирования:

var A = function(){}

console.log( A.prototype.constructor == A ); //true

Итак, на этом этапе каждая новая функция получает объект-прототип, который содержит конструктор в качестве ссылки.Это все хорошо.Теперь рассмотрим следующее:

var B = function() {
    this.id = 0;
}

A.prototype.constructor = B; // what does this do with A?

Итак, каждый экземпляр A должен получить B в качестве конструктора:

var C = new A();

console.log(C.constructor == B) // true

Итак, наконец, имеет ли это реальный эффект для каждого экземпляра?Это не так:

console.log(C.id); // what will this yield?

Мой вопрос: какова цель предоставления ссылки на конструктор?Очевидно, вы можете установить / переопределить его, но он ничего не делает, кроме изменения ссылки.Или я что-то упустил?

1 Ответ

5 голосов
/ 21 ноября 2010

Свойство constructor просто для удобства, оно абсолютно не влияет на поведение вашей программы. По умолчанию, когда вы определяете функцию, func.prototype.constructor устанавливается на func - вы можете установить ее на то, что хотите позже, и это не имеет значения. Построенный объект зависит исключительно от функции, которую you передает new: если вы выполните new A(), он всегда будет вызывать функцию A.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...