2009-04-15 4 views
7

Изучение javascript, когда я столкнулся с концепцией прототипа. Мне удалось добавить новые методы к классу , но не удалось переопределить оригинал talk метод.Функция прототипа JavaScript, не переопределяющая оригинальную

function cat(name) { 
    this.name = name; 
    this.talk = function() { 
     alert(this.name + " : I'm a girl!") 
    } 
} 

cat.prototype.talk = function() { 
    alert(this.name + " : I'm a dude!") 
} 

cat1 = new cat("felix") 
cat1.talk() 

Почему это не предупреждает новый текст?

ответ

16

'функция cat' - это просто функция. Его прототипом является пустой объект ({}). «Новый кот» можно вызвать, чтобы добавить имя пользователя и «поговорить» с новым объектом. Под этим новым объектом будет прототип функции, который все еще {}.

var c= new cat('Tiddles'); 

c ownProperties: { 'name': 'Tiddles', 'talk': function() {...} } 
c inherited: {} 

Теперь, когда вы пишете «cat.prototype.talk», вы добавляете пользователей к тому, лежащей в основе объекта:

c ownProperties: { 'name': 'Tiddles', 'talk': function() {...} } 
c inherited: { 'talk': function() {...} } 

Функция «говорить» прямо на экземпляра «с» принимает приоритет над «разговором», установленный косвенно на прототипе конструктора c.

Итак, вы смешали два стиля наследования здесь, этот метод присваивания и метод прототипа.

Методы написания прототипов имеют то преимущество, что вы не получаете избыточных копий одних и тех же членов, скопированных в каждый экземпляр объекта; Преимущество написания экземпляров в том, что оно решает проблему связанных методов. Какой вы выбираете, зависит от вас, но не смешивайте их. Если вы хотите пройти прототип маршрута, на «это» должно быть записано только «имя», потому что это единственное свойство, специфичное для каждого экземпляра.

7

Функция, прикрепленная в начале, прикрепляется к объекту (1 функция для каждого экземпляра). другой прикреплен к прототипу (1 функция, совместно используемая всеми экземплярами).

членов на уровне объекта переопределяют на уровне прототипа.

Смежные вопросы