2010-11-21 4 views
4

Я пытаюсь получить контроль над конструкторами javascript и если они действительно доступны только для чтения. Вот простой тест сценарий: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? 

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

var C = new A(); 

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

Итак, наконец, это имеет никакого реального влияния на каждом конкретном случае? Это не выглядит так:

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

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

ответ

5

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

+1

Привет, каждый пост, книги, о Javascript наследования, говорит нам, чтобы исправить конструктор прототипа, после этого situtation: 'A.prototype = Object.create (B.prototype),' ' A.prototype.constructor = B // fix here here Я не знаю, что делает объект Object.create, однако следующая строка кажется бесполезной. Я написал код, удаляющий его, и это не имеет никакого эффекта. Поэтому мой вопрос в том, почему все говорят, чтобы * исправить * конструктор? –