ES5中模拟静态成员和ES6类中的静态成员

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');
前端问题总结 文章被收录于专栏

总结一些前端常见的面试笔试题,来和大家分享鸭

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务