2016-12-17 29 views
5

Tôi bắt đầu trong ES6 với nền trong JavaScript. Tôi có một câu hỏi. Tôi có một lớp học ES6 như sau:Tương đương với nguyên mẫu trong ES6

class User{ 
constructor(){ 
} 

doSomething(){ 
} 
} 

Phương pháp được tạo ra mỗi khi chúng tôi khởi tạo đối tượng này? Trong JS trước, chúng ta có thể lấy ra doSomething và tạo nó với "nguyên mẫu" để đảm bảo rằng doSomething được tạo ra một lần, không phải mỗi khi chúng ta khởi tạo đối tượng. Tuy nhiên, tôi lưu ý chắc chắn về cách chính xác để đạt được hiệu quả tương tự trong ES6. Bất kỳ trợ giúp sẽ được đánh giá cao.

Trả lời

10

Câu hỏi của tôi là phương pháp "doSomething" được tạo mỗi khi chúng tôi khởi tạo đối tượng này?

No. Cú pháp class nhiều hơn hoặc ít hơn chỉ syntactic sugar cho hàm xây dựng + nguyên mẫu. I E. kết quả là (hầu như) tương đương với:

function User() {} 
User.prototype.doSomething = function() { }; 

Nhìn vào kết quả Chrome sản xuất:

enter image description here

Tuy nhiên, tôi lưu ý chắc chắn về cách chính xác để đạt được tác dụng tương tự trong ES6.

Như đã nói, class thực hiện điều đó cho bạn. Toàn bộ điểm giới thiệu class là tạo các hàm tạo và các phương thức thiết lập trên prototype dễ dàng hơn (do đó đường cú pháp).


Nếu bạn muốn tìm hiểu thêm, có một cái nhìn tại

  • MDN - Classes

    lớp JavaScript được giới thiệu trong ECMAScript 6 là đường cú pháp trên thừa kế dựa trên nguyên mẫu hiện có JavaScript. Cú pháp của lớp là không phải là giới thiệu một mô hình kế thừa hướng đối tượng mới cho JavaScript. Các lớp JavaScript cung cấp cú pháp đơn giản và rõ ràng hơn nhiều để tạo các đối tượng và xử lý thừa kế.

  • YDKJS - ES6 & Beyond

+0

Điều đáng chú ý là một số người coi 'class' là [thuốc độc cú pháp] (https://github.com/joshburgess/not-awesome-es6-classes). – 4castle

+3

@ 4castle: Đó là ý kiến ​​và không liên quan đến câu hỏi. –

+0

Nó có liên quan bởi vì OP đang hỏi về cách "đúng" để thực hiện nó trong ES6, có nghĩa là bạn nên hiển thị cả hai mặt của đối số. – 4castle

2

Tuyệt đối không. Có vẻ như không có phương pháp ràng buộc nào khác để thử nghiệm thủ công trong ES6, nhưng thực tế là ES6 giúp chúng ta làm điều đó trong nền.
Như MDN nói:

lớp JavaScript được giới thiệu trong ECMAScript 6 là đường cú pháp trên thừa kế dựa trên nguyên mẫu hiện có JavaScript. Cú pháp lớp không giới thiệu một mô hình kế thừa hướng đối tượng mới cho JavaScript. Các lớp JavaScript cung cấp cú pháp đơn giản và rõ ràng hơn nhiều để tạo các đối tượng và xử lý thừa kế.

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