新写法:所有实例对象自身的属性都定义在类的头部,看上去比较整齐,一眼就能看出这个类有哪些实例属性。另外,写起来也比较简洁。
class Form {
// 设置默认值
x = ''
y = ''
arr = []
constructor() {
// ...
}
// 对数据做输出处理
formData() {
return {
x: this.x,
y: this.y,
string: this.arr.join(',') // "1, 2, 3"
}
}
// 给实例赋值
assignData(data) {
if (!!data) {
this.x = data.x
this.y = data.y
this.arr = data.string.split(',') // [1, 2, 3]
}
}
// 其他方法
toString() {
return '(' + this.x + ', ' + this.y + ')';
}
}
let form = new Form()
form.assignData({
x: 'hello',
y: 'world',
string: '1,2,3,4,5,6'
})
结果:
以下均摘自参考 :Class 的基本语法
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
toString() {
return '(' + this.x + ', ' + this.y + ')';
}
}
class Point {
constructor() {
// ...
}
toString() {
// ...
}
toValue() {
// ...
}
}
// 等同于
Point.prototype = {
constructor() {},
toString() {},
toValue() {},
};
在类的实例上面调用方法,其实就是调用原型上的方法。
可复习一下原型链:
class B {}
let b = new B();
b.constructor === B.prototype.constructor // true
constructor 方法
constructor
方法是类的默认方法,通过new
命令生成对象实例时,自动调用该方法。一个类必须有constructor
方法,如果没有显式定义,一个空的constructor
方法会被默认添加。
class Point {
}
// 等同于
class Point {
constructor() {}
}