2015-10-08 17 views
24

Tôi là một phần của một nhóm nghiên cứu nhỏ tại nơi làm việc đang cố nắm bắt tốt hơn những gì làm cho JavaScript đánh dấu. Trong các cuộc thảo luận gần đây về các đối tượng, chúng ta đã biết rằng các phương thức công khai của một đối tượng được tái tạo mỗi khi một đối tượng được khởi tạo, trong khi các phương thức được gán cho nguyên mẫu của đối tượng chỉ được tạo một lần và được thừa hưởng bởi tất cả các cá thể. Từ những gì tôi hiểu, cả hai phương thức công cộng và những phương thức được gán cho nguyên mẫu đều có thể truy cập công khai.Tại sao lại sử dụng các phương thức công khai trong các đối tượng JavaScript?

Câu hỏi tôi có, sau đó, là lý do tại sao bận tâm tạo ra phương pháp công cộng ở tất cả nếu thêm vào nguyên mẫu rõ ràng là hiệu quả hơn? Phương pháp nào công khai cung cấp nguyên mẫu không?

+0

Prototype Ngoài các đối tượng tạo ra phương pháp tương tự cho các đối tượng khác của cùng một lớp (trong trường hợp này là một chức năng) được thêm. ví dụ nếu tôi có 'var name = new Student()' và tôi đã thêm một prototype để đặt tên, nó sẽ có thể truy cập được 'var name2 = new Student()' cũng như –

+1

@AkshayKhandelwal Giả sử OP có nghĩa là làm 'this.GetName = function() {...} 'bên trong hàm tạo' Student', bạn có thể truy cập từ cả hai, tuy nhiên nó được "tái tạo mỗi lần". –

+1

Một câu hỏi tương tự: [Ưu điểm của việc sử dụng nguyên mẫu, so với phương pháp xác định thẳng trong hàm tạo?] (Http://stackoverflow.com/questions/4508313/advantages-of-using-prototype-vs-defining-methods-straight-in -the-constructor? rq = 1) –

Trả lời

24

trả lời này cụ thể là:

lợi ích gì phương pháp nào quy định rằng nguyên mẫu không?

Một phương pháp bổ sung trong các nhà xây dựng có quyền truy cập vào thông tin cá nhân, ví dụ:

function Student() { 
    var name = 'Bob'; 
    this.GetName = function() { 
     return name; 
    } 
} 

Student.prototype.SomeOtherPublicMethod = function() { 
    //no access to name 
} 
+0

Điều này có ý nghĩa, @James Thorpe. – AurumPotabile

+0

Trừ khi bạn quấn "lớp" thành một hàm tự thực hiện và di chuyển các phương thức và trường riêng ra khỏi hàm tạo. – Kroltan

+0

@Kroltan Tôi muốn được quan tâm để xem cách bạn xây dựng một thứ như vậy, nơi mà các phương thức nguyên mẫu có quyền truy cập vào các biến riêng tư, nhưng mỗi cá thể của đối tượng có dữ liệu riêng của nó. (thực sự, không mỉa mai ...!) –

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