ES6 class 类的理解(一) (2)

this.printName = this.printName.bind(this)绑定解决

class Logger{ constructor(){ this.printName = this.printName.bind(this); } printName(name = 'there'){ this.print(`Hello ${name}`); } print(text){ console.log(text); } } const logger = new Logger(); const {printName} = logger; printName();//Hello there 静态方法static

如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是通过类来调用

class Foo{ static classMethod() { return 'hello'; } } console.log(Foo.classMethod());//Hello const foo = new Foo(); // console.log(foo.classMethod())//foo.classMethod is not a function class Fun { static bar(){ this.baz(); } static baz(){ console.log('hello'); } baz(){ console.log('world'); } } Fun.bar();//hello

父类静态方法可以被子类调用

class Func{ static classMethod() { return 'hello'; } } class Baa extends Func{ static classMethod(){ console.log(super.classMethod + ",too") ; } } Baa.classMethod();//hello,too 实例属性的新写法 class IncreasingCounter{ // constructor(){ // this._count = 0; // } _count = 0; get value(){ console.log('getting the current value'); return this._count; } increment(){ this._count++; } } new.target属性

确保函数只能通过new命令调用

function PersonMan(name){ if(new.target !== undefined){ this.name = name; }else{ throw new Error('必须使用new命令生成实例') } } function PersonWoman(name){ if(new.target === PersonWoman){ this.name = name; }else{ throw new Error('必须使用new命令生成实例') } } const personman = new PersonMan('张三'); const personwoman = new PersonWoman('张三'); // const personwoman2 = PersonWoman.call(PersonWoman,'张三');//报错

内部调用new.target会返回当前的class

class Rectangle{ constructor(length,width){ console.log(new.target); console.log(new.target===Rectangle); this.length = length; this.width = width; } } const rectangle = new Rectangle(3,4);

子类继承父类时,new.target会返回子类

class Rec{ constructor(length,width){ console.log(new.target); console.log(new.target===Rectangle); console.log(new.target===Square); this.length = length; this.width = width; //... } } class Square extends Rec{ constructor(length,width){ super(length,width); } } const squareA = new Square(3,6);//false/true 注意:Object.create()法

Javascript的国际标准ECMAScript第五版(目前通行的是第三版),提出了一个新的方法Object.create()。
使用Object.create()的方法,"类"就是一个对象,不是函数。
详细的可以看这篇文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyypfd.html