西安手机网站制作的公司,企业logo设计免费在线,建筑网站叫什么盘,吉林省吉林市有几个区基本介绍
1. constructor
constructor()方法是类的默认方法#xff0c;通过new命令生成对象实例时#xff0c;自动调用该方法。
一个类必须有constructor()方法#xff0c;如果没有显式定义#xff0c;一个空的constructor()方法会被默认添加。如#xff1a;
class Po…基本介绍
1. constructor
constructor()方法是类的默认方法通过new命令生成对象实例时自动调用该方法。
一个类必须有constructor()方法如果没有显式定义一个空的constructor()方法会被默认添加。如
class Point {}// 等同于
class Point {constructor() {}
}类必须使用new调用否则会报错。如new Point()
类的属性和方法除非显式定义在其本身即定义在this对象上否则都是定义在原型上即定义在class上。
class Point {constructor(x, y) {this.x x;this.y y;}toString() {return ( this.x , this.y );}
}var point new Point(2, 3);point.toString() // (2, 3)point.hasOwnProperty(x) // true
point.hasOwnProperty(y) // true
point.hasOwnProperty(toString) // false
point.__proto__.hasOwnProperty(toString) // true实例属性也可以按照如下方法去写
class IncreasingCounter {_count 0;get value() {console.log(Getting the current value!);return this._count;}increment() {this._count;}
}2. 存取函数
在“类”的内部可以使用get和set关键字。如
class MyClass {constructor() {}get prop() {return getter;}set prop(value) {console.log(setter: value);}
}let inst new MyClass();inst.prop 123;
// setter: 123inst.prop
// getter3. 属性表达式
类的属性名可以采用表达式方式书写。如
let methodName getArea;class Square {constructor(length) {}[methodName]() {}
}4. 静态方法和静态属性
类中也可以定义静态方法静态方法通过关键字static定义。类相当于实例的原型所有在类中定义的方法都会被实例继承。但静态方法不会如果定义了static类型就表示该方法不会被实例继承而是直接通过类来调用
class Foo {static classMethod() {return hello;}
}Foo.classMethod() // hellovar foo new Foo();
foo.classMethod()
// TypeError: foo.classMethod is not a function5. 私有属性
ES6的私有属性是在变量名前加#来定义。私有属性只能在类的内部使用如果在类的外部使用就会报错。
6. in运算符
前面说过直接访问某个类不存在的私有属性会报错但是访问不存在的公开属性不会报错。这个特性可以用来判断某个对象是否为类的实例。
继承
ES6中通过extends关键字实现继承。如
class Point { /* ... */ }class ColorPoint extends Point {constructor(x, y, color) {super(x, y); // 调用父类的constructor(x, y)this.color color;}toString() {return this.color super.toString(); // 调用父类的toString()}
}父类所有的属性和方法都会被子类继承除了私有的属性和方法。子类无法继承父类的私有属性或者说私有属性只能在定义它的 class 里面使用。如
class Foo {#p 1;#m() {console.log(hello);}
}class Bar extends Foo {constructor() {super();console.log(this.#p); // 报错this.#m(); // 报错}
}父类的静态属性和静态方法也会被子类继承。如
class A {static hello() {console.log(hello world);}
}class B extends A {
}B.hello() // hello world上面代码中hello()是A类的静态方法B继承A也继承了A的静态方法。
注意静态属性是通过软拷贝实现继承的。