ES5-类

87 阅读1分钟

定义属性与方法

function Person() {
    this.name = '张三';
    this.age = 12;
    this.run = function() {
        console.log(this.name + '在运动');
    }
}
var p = new Person();
console.log(p.name); // 张三
p.run(); // 张三在运动

类的静态方法

Person.getInfo = () => {
    console.log('我是静态方法,使用时不需要new');
}
Person.getInfo(); // 我是静态方法,使用时不需要new

构造函数和原型链里面增加方法或属性

  • 原型链上面的属性会把多个实例共享 构造函数不会
Person.prototype.sex = '男';
Person.prototype.work = function() {
    console.log(this.name + '在工作');
}
console.log(p.sex); // 男
p.work(); // 张三在工作

继承

  • 只使用 对象冒充【不推荐】 不能继承 原型链上的方法或属性,可以继承 构造函数的方法或属性
// 不能继承 原型链上的方法或属性
// 可以继承 构造函数的方法或属性
function Girl() {
    Person.call(this);
}
var g = new Girl('张三');
g.run(); // undefined在运动
// g.work(); // error 不能继承 原型链上的方法或属性
  • 只使用 原型链【不推荐】
// 既能继承 原型链上的方法或属性,又能继承构造函数中的方法或属性
function Boy() {

}
Boy.prototype= new Person('张三');
var b = new Boy();
b.run(); // 张三在运动
b.work(); // 张三在工作
  • 原型链+对象冒充的组合继承模式【推荐】
function YoungPeople(name) {
    Person.call(this, name);
}
// YoungPeople.prototype = new Person(); // 第一种书写方式
YoungPeople.prototype = Person.prototype; // 第二种书写方式
var yP = new YoungPeople('年轻人');
yP.run(); // 年轻人在运动
yP.work(); // 年轻人在工作