2010-08-13 47 views
6

Tôi đã nghiên cứu kế thừa javascript trong một vài ngày và mặc dù tôi đã thực hiện khá nhiều tiến bộ nhưng có một số điều tôi chưa hiểu rõ.__proto__ và thừa kế trong Javascript

Ví dụ, tôi thấy hành vi này khá khó hiểu:

' __proto__ điểm bất động sản s đến một đối tượng mà không Manager là'
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 hiện nguyên mẫu. Đây là một chút phản trực giác, cho rằng:

Một đối tượng kế thừa các thuộc tính ngay cả khi chúng được thêm vào nguyên mẫu của nó sau khi đối tượng được tạo.

Taken từ JavaScript: The Definitive Guide, 5th Edition, By David Flanagan

thể hành vi này không được áp dụng cho các trường hợp nói trên, quá?

Có ai có thể làm rõ?

Trả lời

4

Đó là một chút bối rối vì chức năng là bản thân các đối tượng:

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