2010-06-01 32 views
7

Những gì "xấu xí" nào sau đây giải quyết? Có cái gì đó tôi không nhận được, và tôi đánh giá cao sự giúp đỡ để hiểu nó là gì.Ví dụ từ: "Javascript - The Good Parts"


Ví dụ, bằng cách làm tăng Function.prototype, chúng ta có thể tạo ra một phương pháp có sẵn cho tất cả các chức năng:

Function.prototype.method = function (name, func) { 
    this.prototype[name] = func; 
    return this; 
}; 

Bằng cách làm tăng Function.prototype với một phương pháp phương pháp, chúng tôi không còn phải gõ tên của thuộc tính nguyên mẫu. Đó là chút xấu xí bây giờ có thể được ẩn.

Trả lời

15

Vâng, sự xấu xa là chủ quan, nhưng hãy xem.

Bạn thường viết:

function Foo() {} 
Foo.prototype.method1 = function() { /*...*/ }; 
Foo.prototype.method2 = function() { /*...*/ }; 

Bạn mở rộng đối tượng prototype một constructor function với các thuộc tính mà bạn muốn được thừa hưởng để các trường hợp được tạo ra bởi các nhà điều hành mới.

Ví dụ với var obj = new Foo(); bạn đang tạo một thể hiện của các nhà xây dựng Foo, đối tượng đó sẽ kế thừa tất cả các tính chất ràng buộc với đối tượng Foo.prototype và các đối tượng khác cao hơn trong prototype chain.

phương pháp của Crockford cũng làm như vậy, phương pháp được định nghĩa trong đối tượng Function.prototype, tất cả các chức năng kế thừa từ đối tượng đó, vì vậy bạn có thể gọi phương thức như thế này:

function Foo() {} 
Foo.method('method1', function() { /*...*/ }); 
Foo.method('method2', function() { /*...*/ }); 

Về cơ bản nó chỉ da sự prototype từ từ mã, mà Crockford coi xấu xí ...

"JavaScript The good Parts" là một cuốn sách thực sự tốt, nhưng tôi nghĩ là dựa trên quan điểm cá nhân mà Douglas Crockfor d có ngôn ngữ.

Tôi đồng ý với anh ta với rất nhiều thứ, nhưng tôi cũng không đồng ý với một số khía cạnh ...

+1

Sử dụng từ "nguyên mẫu" dường như rõ ràng hơn và rõ ràng khi đọc mã. Cảm ơn câu trả lời :) – Matrym

+2

Tôi đồng ý. Crockford đang sủa cây sai trong trường hợp này là IMO. – bobince