美文网首页
ES6之class

ES6之class

作者: zzzZink | 来源:发表于2018-08-28 12:29 被阅读0次

class介绍

ES6之前,我们只能通过构造函数来生成实例对象。

function Person(name, age){
  this.name = name
  this.age = age
}
Person.prototype.eat = ()=>console.log('我在吃饭呢')
let p1 = new Person('zink', 20)
p1.eat()  //我在吃饭呢

这种写法个人认为有些麻烦,新手不太能理解(尤其是java这类面向对象语言)。

引用阮一峰老师对class介绍就是:

ES6 的class可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。

//定义类
class Person{
  constructor(name, age){
    this.name = name
    this.age = age
  }

  setAge(age){
    this.age = age
  }
}
typeof Person //function
let p1 = new Person('zink', 20)
let p2 = new Person('jack', 18)
p1.__proto__ === p2.__proto__  //true

上面的代码使用ES6的class定义了一个类,constructor方法就是构造方法,this指向对象实例,setAge方法实际就是ES5中定义在构造函数的prototype里面的方法,ES6 的类,完全可以看作构造函数的另一种写法。
跟ES5相同,类的所有实例共享一个原型对象。
类不能重复声明

如果类的方法中有this,默认指向类的实例。


constructor方法

ES6规定constructor方式是一个类必须的,即使在定义类时没有写,JS引擎也会默认为它添加一个空的constructor方法,constructor方法在通过new命令生成实例对象时自动调用。

使用类生成示例对象必须使用new命令,普通的构造函数不使用new命令也可以执行。


不存在变量提升

类不存在变量提升(所有的变量的声明语句,都会被提升到代码的头部)

new Test()  //Uncaught ReferenceError: Test is not defined
class test{}

class的静态方法

类相当与实例的原型,类中定义的所有方法都会被实例继承,但只要在方法前加上static关键字,那么该方法就不会被实例继承,只能通过直接调用类来使用,并且如果静态方法内含有this,这个this指向类而非实例。

class Person{
    static fn(){
        this.test()
    }
    static test(){
        console.log('test')
    }
    test(){
        console.log('我不是静态方法')
    }
}
Person.fn()  //test
let test = new Person()
test.fn()  //Uncaught TypeError: test.fn is not a function

相关文章

  • 原型与原型链

    关键字 prototype constructor __proto__ Object 在没有ES6的Class之...

  • ES6 class与继承

    class是什么 class是定义类的方法。ES6之前用构造函数的方式定义类,ES6引入了class。 class...

  • ES6之class

    class介绍 ES6之前,我们只能通过构造函数来生成实例对象。 这种写法个人认为有些麻烦,新手不太能理解(尤其是...

  • ES6之class

    解决的问题 更加清晰的书写继承,面向对象编程 基本语法 constructor 构造方法,this关键字代表构造对...

  • ES6之Class

    基本写法 ES6的class语法基本上就是基于以前ES5构造函数的包装函数,也可以叫做语法糖,所有的功能都能用ES...

  • ES6之class

    class基本语法: 1.实质: ​ class只是一个语法糖,类的所有方法都定义在类的prototype...

  • ES6之Class

    参考地址:http://es6.ruanyifeng.com/#docs/class 本节缺少实战与深刻理解,本节...

  • 手写乞丐版的Promise

    使用es6,class手写promise class NewPromise { constructor(exe...

  • 2JavaScript设计模式--class/extends

    ES6语法 类 class ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板...

  • 深入理解JS面向对象 - JavaScript实现继承的五种方式

    一、类与实例 1. 类的声明 传统function类的声明 ES6中的class声明 1.1 ES6 class与...

网友评论

      本文标题:ES6之class

      本文链接:https://www.haomeiwen.com/subject/ekjfwftx.html