2009-11-13 78 views
31

根据this article它应该是一个JavaScript 2.0定义类的方式。但是,我从来没有在实践中看到过。因此,这个问题。如何使用class关键字和Javascript 1.x的做事方式有什么区别?Javascript中的类关键字

+3

的文章中找到给出了在大红色的字母一个体面的解释 – 2009-11-13 12:43:34

+2

词语“1999年2月草案”页面顶部应该是这篇文章可能与现实世界没有多大关系的线索;-) – NickFitz 2009-11-13 13:02:33

+0

您的意思很像HTML 5草案,现在实际上是一个规范? ;) – 2009-11-13 13:17:40

回答

43

你从来没有见过在实践中使用的class关键字的原因是all the current implementations of JavaScript are 1.x.

JavaScript 2.0 was merged into ECMAScript 4 which was rather unpopular等从未进入现实世界。

因此要回答你的问题,你如何使用关键字class?你不能。

+0

感谢您的评论。 虽然有趣的事情。编写JavaScript文件时,Visual Studio 2008将其识别为有效的关键字。 – 2009-11-13 13:16:37

+0

@Validimir - VS2008可能会识别class关键字,因为您可以在JScript.NET中使用它。 – 2009-11-13 13:21:49

+6

类(以及许多其他java关键字)是一个保留字,因此理论上语言可以在不破坏现有程序的情况下添加支持。在https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Reserved_Words上有完整列表。 – 2009-11-13 16:28:56

5

你从来没有在实践中看到它,因为事实上没有任何东西支持JavaScript 2.0。该草案来源于除草案之外的任何其他规范。

2

你仍然可以在JS中使用原型构建类!

var foo = function() { 
    this.hurrah = "yay!"; 
    return this; 
} 

foo.prototype.doit() { 
    alert(this.hurrah); 
} 
+0

是的。我知道。 – 2012-02-16 15:03:50

+5

-1甚至不能远程解决问题。 – Ben 2013-04-23 04:02:30

1

如果您在一个Java或C#的背景,这里是如何在JavaScript

var MyClass = function (f, l){//constructor 
    //private members 
    var firstName = f, 
     lastName = l, 
     fullName = function() { //fullName is a private function 
      return firstName + " " + lastName; 
     }; 
    return { 
     //public members 
     getFullName: fullName 
    }; 
} 

var output = document.getElementById('Output'); //<div id="Output"></div> 
var myName = new MyClass("First", "Last"); 
output.innerHTML = myName.getFullName(); 
+10

你有什么不是一个相当类,它只是一个对象。为了把它称为一个类,你必须有一个不返回任何东西的构造函数,以及将东西附加到它的原型的能力,还应该有一种方法来继承该类。没有办法正确地从这个对象继承,因为它没有原型链。请注意,这种方法不是内存友好的,因为它将方法存储在闭包中,而不是在原型上,它隐藏了标准JS原型类系统不支持的私有成员。 – 2013-01-30 20:03:37

0

定义一个类我想补充类制作的ECMA5方式。

需要注意的是它不具有一个构造函数这样(但如果你喜欢,你可以触发一个初始化函数)

 var Class = { 
      el: null, 
      socket: null, 

      init: function (params) { 

      if (!(this.el instanceof HTMLElement)) { 
       throw new Error('Chat room has no DOM element to attach on.'); 
      } 

      return this.doStuff(); 

      }, 
      doStuff: function (params) { 
      return this; 
      } 
     }; 

    var instanceofClass = Object.create(Class, { 
     el: { 
     value: document.body.querySelector('.what ever') 
     }, 
     someMoreData: { 
     value: [0,5,7,3] 
     } 
    }).init(); 

*编辑移动描述出来的代码块的

29

我知道这是一个旧的帖子,但截至今天,即随着ECMAScript 6的到来,我们可以声明JavaScript类。

的语法去如下:

class Person{ 
    constructor(name){ 
    this.name = name; 
    } 
    printName(){ 
    console.log('Name is '+this.name); 
    } 
} 
var john = new Person('John Doe'); 
john.printName(); // This prints 'Name is John Doe' 

的完整指南。这可以在this post