1.js创建对象的几种方式
工厂模式
为什么会产生工厂模式,原因是使用同一个接口创建很多对象,会产生大量的重复代码,为了解决这个问题,产生了工厂模式。
function createPerson(name,age,job){
var o=new Object();
o.name=name;
o.age=age;
o.job=job;
o.sayName=function(){
console.log(this.name);
}
return o;
}
var person1=createPerson("kobe","34","player");
var person2=createPerosn("patty","32","singer");
构造函数模式
与工厂模式不同的是,没有显示的创建对象,直接将属性和方法赋值this对象,没有return语句。
function Person(name,age,job){
this.name=name;
this.age=age;
this.job=job;
this.sayName=function(){
console.log(this.name);
};
}
var person1=new Person();
var person2=new Person();
console.log(person1.sayName==person2.sayName)//false 说明不同实例的同名函数是不相等的
如果我们想要的结果是两者相等,可以这样实现
function Person(name,age,job){
this.name=name;
this.age=age;
this.job=job;
this.sayName=sayName;
}
function sayName(){
console.log(this.name);
}
var person1=new Person();
var person2=new Person();
console.log(person1.sayName==person2.sayName);//true
创建Person的新实例,需要用到new操作符,这种方式下调用构造函数会经历四个阶段,分别是:
创建一个新对象
将构造函数的作用域赋值给这个新的对象
执行构造函数中的代码
返回新对象
person1和person2这两个对象都有一个constructor属性,该属性指向Person
console.log(person1.constructor==Person);//true
console.log(person2.constructor==Person);//true
原型模式
特点:新对象的这些属性和方法是所有实例共享的
function Person(){
}
Person.prototype.name="kobe";
Person.prototype.age=38;