JavaScript类中的实例方法、原型方法和静态方法
JavaScript中的类从技术上来说仍然是函数,因为我们可以不使用class关键字而实现所有有关类的操作。但是class关键字并不是简单的语法糖,其内部运行机制是有一些区别的,不排除随着语法规范的更新,其中的差别会越来越大。
1. 实例方法
实例方法是指定义在构造函数里的方法,它是和新创建的this对象绑定的,只能通过新创建的这个对象来调用。同时也意味着在不同的实例上调用的实例方法是不同的。
2. 原型方法
原型方法是定义在构造函数之外的方法,它是定义在类的原型对象上的,可以通过People.prototype.yuanxing()调用,同时也可以通过实例直接调用:p.yuanxing()
3. 静态方法
静态方法是定义在构造函数之外,并通过static关键字定义的方法,它是定义在类本身上的,和具体的实例没有关系,通过类名直接调用:People.jingtai()
class People{
constructor(name,age){
this.name = name || "匿名";
this.age = age || 1;
this.shili = function(){
console.log("实例方法");
}
}
yuanxing(){
console.log("原型方法");
}
static jingtai = function(){
console.log("静态方法");
}
}
let p = new People("张三",18);
p.shili(); // 输出:实例方法
p.yuanxing(); // 输出:原型方法
p.jingtai(); // 报错,因为静态方法不能通过实例调用
People.jingtai(); // 输出:静态方法
People.yuanxing(); // 报错,因为原型方法不能通过类名直接调用
People.shili(); // 报错,因为实例方法也不能通过类名直接调用
People.prototype.yuanxing(); // 输出:原型方法
People.prototype.shili(); // 报错,因为实例方法只能通过实例对象调用
People.prototype.jingtai(); // 报错,因为静态方法只能通过类名调用