2010-05-30 44 views
13

Douglas Crockford dường như thích cách tiếp cận thừa kế sau:Javascript thừa kế

if (typeof Object.create !== 'function') { 
    Object.create = function (o) { 
     function F() {} 
     F.prototype = o; 
     return new F(); 
    }; 
} 
newObject = Object.create(oldObject); 

Có vẻ OK với tôi, nhưng làm sao nó khác với cách tiếp cận simple inheritance John Resig không?

Về cơ bản nó đi xuống

newObject = Object.create(oldObject); 

so

newObject = Object.extend(); 

Và Tôi quan tâm đến lý thuyết. Thực hiện khôn ngoan có vẻ không có nhiều sự khác biệt.

+0

Tôi cũng thích kỹ thuật Object.create(). Tôi thảo luận về nó trên blog của tôi: http://ncombo.wordpress.com/2013/07/11/javascript-inheritance-done-right/ – Jon

Trả lời

7

Cách tiếp cận hoàn toàn khác nhau, kỹ thuật Resig tạo chức năng xây dựng, phương pháp này còn được gọi là thừa kế cổ điển ví dụ:

var Person = Class.extend({ 
    init: function(isDancing){ 
    this.dancing = isDancing; 
    } 
}); 

var p = new Person(true); 

Như bạn thấy, các đối tượng Person thực sự là một constructor function, đó là được sử dụng với toán tử new.

Với kỹ thuật Object.create, các thừa kế được dựa trên các trường hợp, nơi các đối tượng kế thừa từ các đối tượng khác trực tiếp, mà còn được gọi là cấp NC Inheritance hoặc Differential Inheritance.

+0

Chỉ quan tâm, ý kiến ​​của bạn về cách tiếp cận của Crockford là gì? Tôi có thể không bao giờ hoàn toàn hiểu được sự hấp dẫn của các trường hợp ít bị phản đối ... – James

+0

@JP: Tôi thực sự thích ['Object.create'] (https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Object/ tạo ra) nó làm cho kế thừa prototypal rất đơn giản, và bạn có thể xây dựng các mô hình sáng tạo thực sự thông minh với nó, và bây giờ với ECMAScript 5th Edition, phương pháp tuân thủ tiêu chuẩn có thể sử dụng các mô tả đặc tính ... rất mạnh mẽ ... – CMS

+1

Vì vậy, tại sao một sử dụng cái khác? Tôi cần phải xây dựng một hệ thống và sử dụng một số thừa kế thông minh, nhưng tôi không thấy bất kỳ lý do nào để chọn một cái khác. – Tower

6

Chúng hoàn toàn khác nhau.

Phương pháp Douglas Crockford tạo ra một cá thể kế thừa một phiên bản khác.

Phương pháp tiếp cận của John Resig tạo ra một lớp học kế thừa một lớp khác.

Khi sử dụng phương pháp Douglas Crockford, bạn đang tạo một cá thể đối tượng mới kế thừa một cá thể hiện có.

Khi sử dụng phương pháp tiếp cận của John Resig, bạn đang tạo hàm hàm tạo, sau đó bạn có thể sử dụng để tạo các phiên bản của lớp được kế thừa.

Các vấn đề liên quan