2009-12-09 37 views
7

chức năng Javascript có thể được công bố trên một nguyên mẫu đối tượng như thế này:Các hàm nguyên mẫu khác với các hàm bình thường trong javascript như thế nào?

<object name>.prototype.<variable name>=function(){ 
// 
// 
} 

Làm thế nào nó này khác với sau lời tuyên bố?

<object name>.<variable name>=function(){ 
// 
// 
} 

Chức năng mẫu thử khác với chức năng bình thường trong javascript như thế nào?

+1

Vui lòng gửi lại cụm từ thành một câu hỏi thực sự có thể được trả lời. – gahooa

+3

@gahooa: Tại sao bạn nghĩ câu hỏi này không thể trả lời được. Nó có thể là cấp độ rất cao, nhưng nó vẫn là một câu hỏi. Bạn luôn có thể chỉnh sửa nó để làm cho nó rõ ràng hơn. Không cần bỏ phiếu điều này đơn giản chỉ vì những sai lầm ngữ pháp ... – Josh

+0

http://stackoverflow.com/questions/186244/what-does-it-mean-that-javascript-is-a-prototype-based-language –

Trả lời

7

các hàm được khai báo trên nguyên mẫu của đối tượng cơ sở được kế thừa bởi tất cả các phiên bản của loại đối tượng đó.

Ví dụ ..

String.prototype.foo = function() { 
    return 'bar'; 
}; 

Bây giờ, mỗi chuỗi sẽ có chức năng foo() có sẵn.

'test'.foo(); // returns 'bar'

Đọc thêm về here

+2

+1 Ngoài ra, cần nêu rõ các hàm đó * và các thuộc tính * được khai báo trên nguyên mẫu của đối tượng được thừa hưởng bởi tất cả các trường hợp của đối tượng đó, * ngay cả những trường hợp đã được khởi tạo. * –

+0

Có, điểm tốt. Phần cuối cùng là rất quan trọng. Các nguyên mẫu hoạt động phần nào như là bắt cuối cùng trước khi một thành viên được coi là 'không xác định' .. do đó, sửa đổi các mẫu thử nghiệm ảnh hưởng đến các đối tượng hiện có quá. – Matt

16

chức năng thử nghiệm dựa trên nguyên mẫu thừa kế là hàm Ví dụ, trong khi chức năng bình thường là "tĩnh" chức năng. Các hàm được khai báo trên nguyên mẫu của lớp sẽ có sẵn trên tất cả các cá thể của lớp đó.

var MyClass = function(){ 
}; 
MyClass.staticFunction = function(){alert("static");}; 
MyClass.prototype.protoFunction = function(){alert("instance");}; 

MyClass.staticFunction(); //OK 
MyClass.protoFunction(); //not OK 

var myInstance = new MyClass(); 
myInstance.staticFunction(); //not OK 
myInstance.protoFunction(); //OK 
+2

+1 Đây là giải thích ngắn gọn nhất mà tôi từng thấy. –

0

Matt và Igor đã cung cấp đủ mẫu mã, nhưng một trong những bài viết hay nhất (ngắn, chính xác và cho điểm) mà bạn có thể đọc là Prototypal Inheritance, bởi Douglas Crockford.

Ngoài ra còn có rất nhiều cách khác nhau để tạo điều kiện thừa kế thông qua các thư viện phổ biến (Dojo, Prototype, vv)

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