2009-11-13 39 views
31

De acuerdo con this article, debe ser una forma de Javascript 2.0 para definir la clase. Sin embargo, nunca lo vi en la práctica. Por lo tanto, la pregunta. ¿Cómo usar la palabra clave class y cuál es la diferencia entre la forma de hacer Javascript 1.x?Palabra clave de clase en Javascript

+3

el artículo da una explicación decente –

+2

Las palabras "Febrero de 1999 Proyecto" en grandes letras rojas en la parte la parte superior de la página debe ser una pista de que el artículo probablemente no tenga mucha relevancia para el mundo real ;-) – NickFitz

+0

¿Te refieres al borrador HTML 5 que ahora es realmente una especificación? ;) –

Respuesta

43

La razón por la que nunca vio la palabra clave class utilizado en la práctica es que all the current implementations of JavaScript are 1.x.

JavaScript 2.0 was merged into ECMAScript 4 which was rather unpopular y así nunca lo hicieron en el mundo real.

Para responder a su pregunta, ¿cómo utiliza la palabra clave class? No puedes.

+0

Gracias por su comentario. Aunque es gracioso. Visual Studio 2008 lo reconoce como una palabra clave válida al escribir el archivo JavaScript. –

+0

@Validimir - VS2008 probablemente reconozca la palabra clave class como se puede usar en JScript.NET. La clase –

+6

(junto con muchas otras palabras clave de Java) es una palabra reservada para que, teóricamente, el lenguaje pueda agregar soporte sin romper los programas existentes. Hay una lista completa en https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Reserved_Words. –

5

Nunca lo viste en la práctica porque prácticamente nada es compatible con JavaScript 2.0. Ese borrador es de una especificación que murió antes de ser algo más que un calado.

2

¡Todavía puedes construir clases en JS usando prototipos!

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

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

Sí. Eso lo sé. –

+5

-1 Ni remotamente aborda la pregunta. – Ben

1

Si usted tiene un Java o C# fondo, aquí es cómo definir una clase en 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

Lo que tienes no es una buena clase, es solo un objeto. Para que pueda llamarlo una clase, debe tener un constructor que no devuelva algo, y la capacidad de adjuntar cosas a su prototipo, y también debería haber una forma de heredar de esa clase. No hay forma de heredar correctamente este objeto porque no tiene una cadena de prototipos.Tenga en cuenta que este enfoque no es compatible con la memoria porque almacena sus métodos en un cierre, en lugar de en el prototipo, esconde miembros privados que los sistemas de clase prototipos estándar JS no lo hacen. –

0

Sólo para añadir el camino de la toma de ECMA5 clase.

Tenga en cuenta que no tiene una función constructora de esta manera (pero se puede activar una función init si lo desea)

 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(); 

* Editar trasladó Descripción de bloque de código

29

Sé que esto es una publicación anterior, pero a partir de hoy es decir con la llegada de ECMAScript 6 podemos declarar clases de JavaScript.

La sintaxis es la siguiente:

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' 

Una guía completa de esto se puede encontrar en this post