当需要使用一个接口创建多个对象时,为了减少冗余代码,我们使用以下办法。这几种方法都各有优劣。
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');