We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
1.ES6 引入 Class(类)这个概念,作为对象的模板。通过 class 关键字,可以定义类。
class Point { constructor(name, age) { this.name = name; this.age = age; } toString() { console.log(this.name + this.age); } } // ES5实现ES6同样的效果 function Point(name, age) { this.name = name; this.age = age; } Point.prototype.toString = function() { console.log(this.name + this.age); };
// ES6 class Point { constructor(x, y) { // ... } toString() { // ... } } Object.keys(Point.prototype); //[] 不可枚举的 ES6; var Point = function(x, y) { // ... }; Point.prototype.toString = function() { // ... }; Object.keys(Point.prototype); // ["toString"] 可以枚举的
2.constructor 方法
3.类的实例对象
生成类的实例对象的写法,与 ES5 完全一样,也是使用 new 命令
class Point { // ... } // 报错 var point = Point(2, 3); // 正确 var point = new Point(2, 3);
4.Class 表达式
const MyChild = class Child { toString() { console.log(Child.name); //name属性总是返回紧跟在class关键字后面的类名。 } }; //类的名字是MyChild而不是Child,Child只在Class内部代码可用 let mychild = new MyChild(); mychild.toString(); // Child //如果函数内部用不到Child,也可以省略 const MyChild = class { // ... };
5.Class 的静态方法
类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前, 加上 static 关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。
class Foo { static className() { console.log("heyushuo"); } } Foo.className(); //heyushuo 不能通过实例调用会报错 // 注意,如果静态方法包含this关键字,这个this指的是类,而不是实例。 class Foo { static bar() { this.baz(); } static baz() { console.log("hello"); } baz() { console.log("world"); } } Foo.bar(); // hello // 1.静态方法bar调用了this.baz,这里的this指的是Foo类,而不是Foo的实例,等同于调用Foo.baz。 // 2.静态方法可以与非静态方法重名。 // 父类的静态方法,可以被子类继承。 class Foo { static classMethod() { return "hello"; } } class Bar extends Foo {} Bar.classMethod(); // 'hello'
1.Class 可以通过 extends 关键字实现继承,这比 ES5 的通过修改原型链实现继承,要清晰和方便很多。
class Parent { constructor(name, age) { this.name = name; this.age = age; } toString() { console.log("年龄:" + this.age + "姓名:" + this.name); } } class Child extends Parent { constructor(name, age, height) { super(name, age); //调用父类的constructor(构造方法) this.height = height; } sayInfo() { super.toString(); // 调用父类的toString() console.log(`身高:${this.height}`); } } var person = new Child("heyushuo", 24, 180); person.sayInfo(); //年龄:24姓名:heyushuo 身高:180
父类的静态方法,也会被子类继承。
// 父类的静态方法,也会被子类继承。 class A { static hello() { console.log("hello world"); } } class B extends A {} B.hello(); // hello world // hello()是A类的静态方法,B继承A,也继承了A的静态方法。
2.super 关键字
super 关键字,既可以当做函数使用,也可以当做对象使用.
super 作为函数
class A {} class B extends A { constructor() { super(); } } // 注意, super虽然代表了父类A的构造函数, 但是返回的是子类B的实例, //即super内部的this指的是B,因此super() 在这里相当于A.prototype.constructor.call(this)。
super 作为对象时
参考:
阮一峰 ES6
The text was updated successfully, but these errors were encountered:
No branches or pull requests
一.class 的基础用法
1.ES6 引入 Class(类)这个概念,作为对象的模板。通过 class 关键字,可以定义类。
2.constructor 方法
3.类的实例对象
生成类的实例对象的写法,与 ES5 完全一样,也是使用 new 命令
4.Class 表达式
5.Class 的静态方法
类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前, 加上 static 关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。
二.类的继承
1.Class 可以通过 extends 关键字实现继承,这比 ES5 的通过修改原型链实现继承,要清晰和方便很多。
父类的静态方法,也会被子类继承。
2.super 关键字
super 关键字,既可以当做函数使用,也可以当做对象使用.
super 作为函数
super 作为对象时
参考:
阮一峰 ES6
The text was updated successfully, but these errors were encountered: