注意:生成类的实例对象的写法,要使用new命令。如果忘记加上new,像ES5函数那样调用Class,将会报错。
// 报错
let point = Point(2,3);
// 正确
let point = new Point(2,3);
2. 类中constructor方法–构造方法
- 构造方法时类中默认的方法,通过new命令生成对象实例时,自动调用该方法,且一个类必须要有constructor方法,如果没有显示定义,一个空的constructor方法会被默认添加。
constructor() {}
注意:constructor方法默认放回实例对象(即this),也可以返回指定的对象
实例代码:
Constructor与普通构造函数的区别: 类的构造函数,不使用new是没法调用的,会报错。这是它跟普通构造函数的一个主要区别,后者不用new也可以执行。
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
toString() {
return ‘(’ + this.x + ', ’ + this.y + ‘)’;
}
}
let p = Point(); //TypeError: Class constructor Point cannot be invoked without ‘new’
注意:在javascript中,在定义类完毕之后,还可以再添加属性和方法。
- 属性和方法添加到this上(实例对象上)
class Point {
constructor() { }
}
let p = new Point();
p.username = “huanhzhizhen”;
console.log(p.username)
let p2 = new Point();
console.log(p2.username); //undefined
注意:上代码中,只是给Point类的实例对象p添加了username属性,并不是给类添加一个属性,所以对于实例对象p2是没有username这个属性的!
3. 给类添加属性或是方法
给类添加属性或是方法有两者凡是,一时通过原型的方法,二是直接通过类.属性的方式。
-
通过原型的方式添加的属性和方法,类的全部实例公用
-
后者添加的属于类的静态属性,只能通过类访问到
3.1 方式1 通过原型prototype
class Point {
constructor() { }
}
Point.prototype.username = “zhuangzhizhen”;
let p1 = new Point();
console.log(‘p1.username-----’, p1.username)
let p2 = new Point();
console.log(‘p2.username-----’, p2.username)
上面代码中,使用 Point.prototype方式,给类添加属性。 这样,类的所有对象(p1、p2)就都有username属性了。
在javascript中,每个类都会有一个prototypr,它就是类的原型,类的所有实例共享一个原型,若类的实例想访问该类的原型,可以使用proto指针(这里跟ES5中定义的后遭函数的实例概念相似0