使用一个接口创建多个对象的几种方法

101 阅读1分钟

当需要使用一个接口创建多个对象时,为了减少冗余代码,我们使用以下办法。这几种方法都各有优劣。

1.工厂模式

解决了创建多个相似对象的问题,但是没有解决对象识别问题,即这个对象的类型。

function person(name ,age){
    var o = new Object();
    o.name = name;
    o.age = age;
    return o;
}
var person1 = person('Bob','18');

2.构造函数

function Person(name ,age){
    this.name = name;
    this.age = age;
}
var person1 =new Person('Bob','18');

console.log(person1.constructor);  //Person
console.log(person1 instanceof Person); // true

可以person1 对象的 constructor 属性,发现他们同属实例 Person 。这就是实例标识、

3.原型模式

每个函数都有一个 prototype (原型)属性。

function Person(){
}
Person.prototype.class = ['语文''数学'];
var person1 = new Person('小a','6');//所有实例都会有class属性

console.log(Person.prototype);
console.log(person1.__proto__);

//实际 Person 这个类为以下形式:
Person = {
    prototype: {
        constructor:指针 指向 ƒ Person()
        class:['语文''数学']
    }
};

4.组合使用构造函数模式和原型模式

function Person(name ,age){
    this.name = name;
    this.age = age;
}
Person.prototype.class = ['语文','数学'];
var person1 = new Person('小a','6');//所有实例都会有class属性
console.log(Person.prototype);
console.log(person1.__proto__);

5.寄生构造函数模式

function Person(name ,age){
    var o = new Object();
    o.name = name;
    o.age = age;
    return o;
}
var person1 = new Person('Bob','18');