ES5中直接将方法添加到构造函数中来模拟静态成员是一种常见的模式。
function PersonType(name){
this.name = name;
}
//静态方法
PersonType.create = function(name){
return new PersonType(name);
};
//实例方法
PersonType.prototype.sayName = function(){
console.log(this.name)
};
var person = PersonType.create('zoe');由于PersonType.create()使用的数据不依赖PersonType的实例,其会被认为是一个静态方法。
ES6类语法创建了静态成员,只需要在方法或访问器属性名前使用静态注释即可。
class PersonClass {
//等价于PersonType构造函数
constructor(name){
this.name = name
}
//等价于PersonType.prototype.sayName
sayName(){
console.log(this.name)
}
//等价于PersonType.create
static create(name){
return new PersonClass(name);
}
}
let person = PersonClass.create('zoe');
//不可在实例中访问静态成员,必须要直接在类中访问静态成员,所以是PersonClass.create()静态成员继承:如果基类有静态成员,这些静态成员在派生类中也可以使用。
class ChildClass extends PersonClass{
constructor(name){ super(name); }
}
var child = ChildClass.create('jayce');
京公网安备 11010502036488号