2010-08-13 71 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__proto__属性指向的对象是不是Manager当前原型。 这是有点不现实的,因为:

对象继承属性,即使它们在创建对象后添加到其原型。

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 */