2009-12-13 40 views
5

Tôi đang đọc một cuốn sách "Cách làm mọi thứ với JavaScript" và tôi hiện đang học cách xác định các lớp học. Cuốn sách nói có 2 cách. đầu tiên sử dụng các hàm trong javascript 1.x. thứ hai, sử dụng lớp trong javascript 2.0.Các lớp học Javascript 2.0

những gì tôi đang cố gắng là:

class Car { 
    var Make : String; 
    var Model : String; 
    var Year : Integer; 
    var Color : String; 
    var FullName : String; 

    function Car (make, model, year, color) { 
     this.Make = make; 
     this.Model = model; 
     this.Year = year; 
     this.Color = color; 
     this.FullName = this.Year + " " + "<b>" + this.Make + "</b> " + this.Model; 
    } 
} 

var mySUV = new Car("Toyota", "4Runner SR5",2001, "Thundercloud"); 
document.write ("I drive a " + mySUV.FullName); 

Mã này không hoạt động khi tôi đang cố gắng để chạy nó. Tôi sử dụng trình soạn thảo komodo để phát triển và khi tôi định nghĩa một lớp như tôi đã đề cập trước đây, nó cho tôi một cảnh báo "cảnh báo nghiêm ngặt: lớp là một định danh dành riêng".

Có vấn đề gì với mã không? Cảm ơn trước sự giúp đỡ nào.

+0

Bạn đang sử dụng thời gian chạy JavaScript 2 nào? – Quentin

+0

Tôi sử dụng trình soạn thảo Komodo và Firefox/3.5.5? Đó có phải là điều bạn ngụ ý trong thời gian chạy Javascript không? – codemaker

+0

Firefox bao gồm thời gian chạy. – Quentin

Trả lời

0

Tôi không biết bất kỳ trình duyệt nào hiện đã triển khai JavaScript 2.0. Đó có thể là lý do tại sao bạn không thể chạy nó.

+1

Tôi xin lỗi. Có vẻ như cuốn sách tôi đọc là xấu. – codemaker

+0

AVM2 (FlashPlayer 9+ đã triển khai EcmaScript 4, nên đã trở thành JavaScript 2) – TheHippo

10

JavaScript 2.0 aka ECMAScript 4 đã bị hủy vào năm 2008, trước khi nó được phát hành. Sẽ không bao giờ có phiên bản ECMAScript dựa trên lớp học. Đó là một điều tốt.

+2

Cá nhân tôi thích ES4. – bgw

+2

Có một số ý tưởng hay trong đó. Nhưng nó có 3 vấn đề chính: 1) nó đơn giản không phải là JavaScript. Nó có thể là một ngôn ngữ * mới * đẹp, nhưng nó không phải là JavaScript. 2) Đơn giản chỉ cần nắm bắt mọi tính năng đơn lẻ từng được phát minh từ mọi ngôn ngữ từng được tạo và đổ chúng vào một ngôn ngữ là * không * cách bạn thiết kế một ngôn ngữ tốt. 3) Bạn không làm nghiên cứu ban đầu trong một cơ quan tiêu chuẩn công nghiệp. Dần dần gõ là mát mẻ, nhưng nó là * vẫn * một vấn đề nghiên cứu mở trong năm 2010. Bạn chỉ đơn giản là không đặt một vấn đề nghiên cứu mở vào ngôn ngữ lập trình được sử dụng rộng rãi nhất trên hành tinh. –

+2

* "Nó có thể là một ngôn ngữ mới đẹp" * - Nó thực sự là, nó được gọi là ActionScript 3;) – poke

-3

chỉ là một chức năng nội bộ sẽ có đủ như sau:

function Car (make, model, year, color) { 
    this.Make = make; 
    this.Model = model; 
    this.Year = year; 
    this.Color = color; 
    this.FullName = this.Year + " " + "<b>" + this.Make + "</b> " + this.Model; 
} 

var mySUV = new Car("Toyota", "4Runner SR5",2001, "Thundercloud"); 
document.write ("I drive a " + mySUV.FullName); 
+0

Đây có phải là cách hiệu quả hơn việc sử dụng các chức năng không? – codemaker

+5

Mã đó không phải là ECMAScript 4 hoặc 6. Đó là một đối tượng bị hỏng. –

+0

owch. Đó là một vật thể bị hỏng nếu tôi từng thấy một mình. Tuy nhiên, một câu trả lời tốt hơn đã được plagarised từ câu trả lời của @ PiPeep. –

1

Chỉ cần cố gắng để kết hợp những thứ cùng nhau, và dọn dẹp câu trả lời của Zain.

Như Jörg W Mittag đã đề cập, ES4/JS2 đã chết, vì vậy hãy thực hiện theo cách ES3/JS1.

Để nén Zain câu trả lời:

/** 
* @constructor 
*/ 
function Car(make, model, year, color) { 
    this.Make = make; 
    this.Model = model; 
    this.Year = year; 
    this.Color = color; 
    this.FullName = this.Year + " " + 
    "<b>" + this.Make + "</b> " + 
    this.Model; 
} 
var mySUV = new Car("Toyota", "4Runner SR5",2001, "Thundercloud"); 
document.write ("I drive a " + mySUV.FullName); 

Nếu bạn muốn làm điều này mà không cần chức năng bạn có thể nói:

var Car = { 
    Make : String, 
    Model : String, 
    Year : Integer, 
    Color : String, 
    FullName : String 
} 

Nhưng sau đó bạn sẽ phải tự thiết lập các giá trị, vì vậy không, có không thực sự là một cách tốt để tạo ra một đối tượng phức tạp mà không cần sử dụng hàm.

+0

': String' được cho là ký pháp kiểu ActionScript, nó không tồn tại trong JavaScript. – bobince

+0

Không, tôi đã kiểm tra nó trong trình biên dịch đóng. Tôi cũng rất ngạc nhiên. – bgw

+0

JS2 không thể chết trước khi nó bắt đầu. JS2 sẽ là ES6. –

4

Phiên bản mới nhất của JavaScript là 1.8.1. Nếu theo JavaScript 2, bạn có nghĩa là ECMAScript 6 (hoặc 4), không có công cụ nào thực hiện nó. Bạn có thể chuyển nó sang mã ECMA-262 bằng cách sử dụng Mascara.

Đối với mọi người khác: Tại sao mọi người nói rằng JavaScript 2 đã chết? Đã có kế hoạch triển khai ECMAScript 4 trong JavaScript 2 và rằng đã bị hủy. JavaScript 2 rất có thể sẽ là triển khai ECMAScript 6 nhưng nó không phải là bản thân ECMAScript 6.

+0

Bài đăng này gây hiểu lầm, các phần của ECMAScript 6 đã được triển khai, ví dụ: Babel. –

+0

Bài đăng này không sai 7 năm trước khi tôi viết nó. ECMAScript 6 đang nhận được hỗ trợ trong hầu hết các công cụ JS hiện nay. –

0

Firefox 3.5 (bạn cho biết bạn đang sử dụng trong nhận xét) supports JavaScript 1.8.1, vì vậy mọi tính năng JS 2 sẽ không được hỗ trợ.

1

Hiện tại, không có trình duyệt chính nào hỗ trợ cú pháp JavaScript 2.0.

Mascara là công cụ sẽ dịch cú pháp JavaScript 2.0 (hoặc thứ gì đó gần) thành JavaScript thông thường sẽ chạy trong bất kỳ trình duyệt nào, vì vậy bạn sẽ có được các lớp, kiểm tra loại, nhưng không phải lo lắng về khả năng tương thích .

Ngoài ra, ActionScript 3 được Flash hỗ trợ có cú pháp gần với JavaScript 2.

Lưu ý rằng JavaScript 2 không phải là tiêu chuẩn chính thức, thay vì đó là tên riêng của Mozilla cho phiên bản JavaScript mới được đề xuất. Tên nhà cung cấp trung lập chính thức cho tiêu chuẩn JavaScript là ECMAScript.

Các phiên bản của ECMAScript được hỗ trợ bởi các trình duyệt chính hôm nay là ECMAScript 3.

Các phần mở rộng đề xuất, tương đương với những gì được gọi là JavaScript 2.0 và Actionscript 3, là tại một thời điểm gọi là ECMAScript 4.

Tuy nhiên, thông số ECMAScript 4 được đề xuất đã được một số nhà cung cấp cảm thấy quá tham vọng, và nó đã quyết định phát triển ngôn ngữ lặp đi lặp lại thông qua các bước ít tham vọng hơn. Do đó, đặc tả ES4 lớn đã bị hủy bỏ và một phiên bản mới gọi là ECMAScript 5 kết hợp một số ít tính năng được đề xuất cho ES4 được tạo ra thay vì bước đầu tiên (đáng chú ý là các lớp và chú thích kiểu không phải là một phần của ES5). ES5 đã được chính thức phát hành, nhưng chưa được hỗ trợ đầy đủ bởi các trình duyệt. Công việc đang diễn ra trên phiên bản tiếp theo, mã có tên "Harmony", nhưng có lẽ sẽ kết thúc op được gọi là ES6. Vẫn chưa rõ liệu ES6 có bao gồm cú pháp cho các lớp hay không.

Điểm mấu chốt: bạn không thể chạy JavaScript 2 trực tiếp trong bất kỳ trình duyệt chính nào hiện nay và có thể mất nhiều năm trước khi bạn có thể.