es6 gramática básica en clase

El concepto de la clase para hacer el fondo debe estar muy familiarizado con, clases de JavaScript para muchas otras diferencias lenguaje orientado a objetos, sólo se puede utilizar el constructor para generar un objeto de instancia. Para acceder al lenguaje tradicional, ES6 introdujo una clase como este concepto, definido por la categoría de clase de palabras clave.

Clase es en realidad un azúcar sintáctico, casi todas las funciones se pueden conseguir de otras maneras, sólo para hacer el código más claro, como la programación orientada a objetos.

sintaxis:

class User{  

  constructor(){ console.log('默认调用'); } eat(){ console.log('eat方法'); } } var user = new User();//默认调用 user.eat()//eat方法 

Tenga en cuenta que los métodos de clase no pueden ser separados por comas, o serán error entre la función no se puede añadir palabras clave y métodos. Todos los métodos se definen en el método de la clase prototipo de la clase. En la instancia de la clase que es llamar a un método en la llamada al método prototipo.

class User{  

  eat(){} } 

Es equivalente a:

function User() {} User.prototype.eat = function () {} 

métodos define los de clase internas no son enumerable, que no es lo mismo con ES5.

Método constructor:

Este es el método por defecto de generación de una nueva instancia de un objeto cuando se le llama automáticamente por, para cada clase tendrá, si no se define explícitamente, añade automáticamente un constructor nulo. Predeterminado devuelve una instancia de un objeto, que es esto. También puede volver el otro objeto, que es el mismo que con el constructor. Clase debe utilizar la nueva llamada, y podemos como un método constructor llama directa.

Y ES5 como ejemplo atributo menos que se defina explícitamente en y de sí mismo (es decir, este objeto se define en a), o se definen en un prototipo (es decir, definido en la clase), todas las instancias de una clase comparten el objeto prototipo, y por lo tanto un caso objetos a través de prototipo proto reescribió el prototipo, cambiarán todas las instancias de un objeto, no se recomienda para todas las instancias de proto reescribir el prototipo.

Lo mismo, la función getter y setter una función también se pueden utilizar en las palabras clave obtener y establecer dentro de la clase:

class User{  

  constructor(){ this.name = 'wade'; } get eat(){ return '这是get'; } set eat(val){ console.log('set调用了'); } } var user = new User(); user.eat = 3//set调用了 console.log(user.eat);//这是get 

expresiones:

Propiedades puede usar [] expresión, este es el mismo con los objetos, las clases pueden también estar directamente definidos por la expresión:

var val = 'my'

var User = class Muser{ [val](){ } } 

Muser sólo está disponible dentro de la clase, uso externo Clase de usuario. Si no se utiliza el interno, o se puede omitir la clase Muser inmediatamente ejecutar:

var User = class {} var user = new class{}() 

A la nota, la clase por defecto es el modo estricto, sino también mejorar no existe la variable, se devuelve el nombre del atributo después de que el nombre de la clase de la clase de palabras clave, también puede utilizar el método gernerator. instancia predeterminada interna de este métodos de clase dirigido clase, utilizando error a cabo por separado.

En frente de la clase con el método de la palabra clave estática, este método no puede ser heredada ejemplo, llamando a la clase, este método se denomina método estático:

class User{  

  static eat(){ console.log('eat'); } }var user = new User(); console.log(user.eat());//报错 User.eat()//eat 

Si el método estático contiene esta palabra clave, esto significa que esta clase en lugar de una instancia:

class User{  

  static eat() { this.say(); } static say() { console.log('hello'); } say() { console.log('world'); } } User.eat() // hello 

Los métodos estáticos y método no estático puede también nombres duplicados. Los métodos estáticos pueden ser heredados por las subclases.

Además de definir las propiedades de instancia en el interior constructor, sino también definida directamente en el nivel superior:

class User1{  

  constructor(){ this.name = 'wade'; } } class User2{ name = 'kobe'; } console.log(new User1().name);//wade console.log(new User2().name);//kobe 

Clase propiedad en sí se llama una propiedad de clase estática, Class.propName, no se define propiedades en una instancia de objeto de esta. métodos estáticos de la clase interna no sólo las propiedades estáticas, es ahora una sola escritura:

Usuario clase {}; User.prop = 1;

Pero hay una propuesta de definición uso estática:

class User{  

  static prop = 1; }; 

principios y declaraciones de organización desde el punto de vista de código, el texto es, sin duda, mejor.

Todos sabemos que la propiedad privada paquete de código y métodos privados es muy importante, pero ES6 la clase no se está ofreciendo. Las soluciones alternativas, tales como nombre de distinguir, el módulo para el método de eliminación, y similares, con un símbolo de la variable. Pero no es muy bueno. Ahora hay una propuesta para usar # para proporcionar la propiedad privada:

class User{  

  #prop = 1;    

  #eat(){} }; 

Sólo se puede utilizar internamente, accesible externamente en el error. Propiedad privada también se pueden establecer los métodos get y set. atributos particulares de la esta referencia no se limita a, como atributos particulares siempre y cuando el interior de la clase, instancia puede hacer referencia a:

class User{  

  #prop = 1;  

  static eat(user){ console.log(user.#prop); } }; User.eat(new User());//1 

nueva instancia del objeto es generar un comando desde el constructor. ES6 introducción de una nueva propiedad de comandos new.target, que se utiliza generalmente en el constructor devuelve el nuevo mando en el sentido de que el constructor. Si el constructor no es un nuevo comando o una llamada por Reflect.construct (), new.target será devuelta sin definir, por lo que esta propiedad puede ser utilizada para determinar cómo se llama al constructor:

function User() { console.log(new.target === User);//true console.log(new.target !== undefined);//true } var user = new User(); 

Si no es nueva:

function User() { console.log(new.target === User);//false console.log(new.target !== undefined);//false } User(); 

new.target llamada interna clase, devuelve la clase actual:

class User{  

  constructor(){ console.log(new.target === User)//true } } new User(); 

Cuando la subclase hereda la clase padre, new.target devolverá una subclase. Utilizando esta función, puede escribir no se puede utilizar de forma independiente, después de mosto clase hereda puede utilizar.



https://www.jianshu.com/p/20acc1080831

Supongo que te gusta

Origin www.cnblogs.com/1833lljy/p/12576103.html
Recomendado
Clasificación