You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ES6 的 class 可以看作一个语法糖,它的绝大部分功能,ES5 都可以做到,新的 class 写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。
classPerson{// 类的内部所有定义的方法,都是不可枚举的constructor(name){// 实例属性this.name=name;}// 实例方法sayHello(){return"hello, I am "+this.name;}// 静态属性static_name="ming";// 静态方法static_getName(){return"my name is "+this._name;}// getter 和 settergetage(){return"20 years old";}setage(newAge){console.log("new age 为:"+newAge);}}// 静态属性// Person._name = "ming";varme=newPerson("tao");me.age=28;// new age 为:28console.log(me.age);// 20 years oldconsole.log(me.name);// taoconsole.log(me._name);// undefinedconsole.log(me._getName());// Uncaught TypeError: me.getName is not a functionconsole.log(Person._name);// mingconsole.log(Person._getName());// my name is mingPerson();// Uncaught TypeError: Class constructor Person cannot be invoked without 'new'
转换成 ES5:
functionPerson(name){// 实例属性this.name=name;}// 静态属性、方法Person._name="ming";Person._getName=function(){return"my name "+this._name;};Person.prototype={constructor: Person,// getter 和 settergetage(){return"20 years old";},setage(newAge){console.log("new age 为:"+newAge);},// 实例方法sayHello(){return"hello, I am "+this.name;}};varme=newPerson("tao");me.age=28;// new age 为:28console.log(me.age);// 20 years oldconsole.log(me.name);// taoconsole.log(me._name);// undefined// console.log(me._getName()); // Uncaught TypeError: me.getName is not a functionconsole.log(Person._name);// mingconsole.log(Person._getName());// my name is mingPerson();// 无报错
ES6 系列之 Class
class
ES6 的 class 可以看作一个语法糖,它的绝大部分功能,ES5 都可以做到,新的 class 写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。
转换成 ES5:
Babel 编译结果:地址。
ES6 extend
Class 通过 extends 关键字实现继承,这比 ES5 的通过修改原型链实现继承,要清晰和方便很多。
对应 ES5 寄生组合式继承:
子类的 proto
在 ES6 中,父类的静态方法,可以被子类继承。
这是因为 Class 作为构造函数的语法糖,同时有 prototype 属性和
__proto__
属性,因此同时存在两条继承链。__proto__
属性,表示构造函数的继承,总是指向父类。__proto__
属性,表示方法的继承,总是指向父类的 prototype 属性。原文链接:
The text was updated successfully, but these errors were encountered: