2013-02-14 2 views
1

Почему я не могу установить прототип внутри функции? Например, почему это не работает?Почему я не могу установить прототип JavaScript внутри функции?

var Bar = function(){ 
    this.name='Bar' 
} 

var barProto = new Bar() 

var Foo = function(){ 
    this.prototype= barProto 
} 

var foo = new Foo() 
console.log(foo.name) // undefined 

Но это действительно работает:

var Bar = function(){ 
    this.name='Bar' 
} 

var barProto = new Bar() 

var Foo = function(){ 

} 

Foo.prototype= barProto 

var foo = new Foo() 

console.log(foo.name) // Bar 

мне не нравится синтаксис присвоения прототипа после того как я создал функцию.

ответ

2

Потому что this.prototype - это не то же самое, что и Foo.prototype. Когда Foo вызывается с new, любая ссылка на this внутри него будет ссылаться на создаваемый экземпляр.

+0

Я Сорт получить то, что вы говорите. Но разве я не хочу, чтобы новый объект, созданный для прототипа barProto, не так ли? Создается ли прототип только при использовании «нового»? Почему я не могу установить свойство прототипа какого-либо объекта в любое время? – Eddie

+0

То, что я говорю, точно такое же, как ben336. «Почему я не могу установить свойство прототипа какого-либо объекта в любое время?» - вот как работает язык ... Может быть, вы предпочитаете 'var foo = Object.create (barProto)'? Это тоже работает и не требует конструктора 'Foo' или ключевого слова' new'. – bfavaretto

5
this.prototype= barProto 

не эквивалентно

Foo.prototype= barProto 

this относится к конкретному объекту, который будет создан новый Foo()

Foo является функцией конструктора. Вы устанавливаете прототип в конструкторе, а не в конкретном экземпляре.

Более подробная информация о прототипе наследования здесь: Mozilla docs

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