2010-08-13 3 views
6

Я изучаю наследование javascript на пару дней, и хотя я сделал довольно много прогресса, есть некоторые вещи, которые я пока не совсем понимаю.__proto__ и наследование в Javascript

Например, я нахожу это поведение довольно запутанным:

var Employee = function Employee() { this.company = 'xyz'; }; 
var Manager = function Manager() { this.wage = 'high'; }; 

var m = new Manager(); 

m; // { "wage": "high", __proto__ : Manager } -- no problems so far. 

Manager.prototype = new Employee(); 

var n = new Manager; 

m.company; // undefined 
n.company; // "xyz" 

m 's __proto__ свойство указывает на объект, который не является Manager' s тока прототип. Это немного противоречит здравому смыслу, учитывая, что:

Объект наследует свойства, даже если они будут добавлены в его прототип после создания объекта.

Взятые из JavaScript: The Definitive Guide, 5th Edition, By David Flanagan

Не может ли это поведение быть применено к вышеупомянутому делу, тоже?

Может ли кто-нибудь уточнить?

ответ

4

Это немного сбивает с толку, потому что функции сами по себе являются объектами:

function Employee() {this.company = 'xyz';} 
function Manager() {} 

var m = new Manager(); 
Manager.prototype = new Employee(); 

/* You set the prototype on the Manager function (object), 
    your m instance and Manager function are separate objects. 
    At this point the prototype of m is still undefined */ 

m = new Manager(); 
m.company; // 'xyz' 

/* Creating a new Manager copies the new prototype */ 
Смежные вопросы