您的位置:首页 > Web前端 > JavaScript

JavaScript设计模式

2015-11-03 18:54 721 查看
原文地址:https://github.com/vino24/blog/issues/88

1. 最初

var person = new Object();
person.name = "vino24";
person.age = 22;
person.job = "FE Engineer";

person.sayName = function() {
alert(this.name);
}

缺陷:

创建很多对象时,会产生大量重复代码


2. 工厂模式


抽象出创建具体对象的过程,在JavaScript中以函数来封装特定接口创建对象的细节。


function createPerson(name,age,job) {
var o= new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function() {
alert(this.name);
};
return o;
}

var person1=createPerson("vino24",22,"FE");
person1.sayName();

缺陷:

没有解决对象识别的问题


3. 构造函数模式

function Person(name,age,job) {
this.name = name;
this.age = age;
this.job = job;
this.sayName=function() {
alert(this.name);
};
}

var person1 = new Person("vino24",22,"FE");
person1.sayName();

· 构造函数模式与工厂模式区别:

没有显式的创建对象

直接将属性方法赋值给了this对象

没有return语句

使用new操作符创建对象的过程:

创建一个新对象

将构造函数的作用于赋值给新对象(this便指向了新对象)

执行构造函数中的代码(为新对象添加属性)

返回新对象

· 缺陷:

构造函数中的方法都要在每个实例上创建一遍


4.原型模式

function Person() {
}

Person.prototype = {
constructor:Person,
name:"vino24",
age:22;
job:"FE",
sayName:function() {
alert(this.name);
}
};

var person1=new Person();
Person.sayName();

缺陷:

所有的实例都会共享其属性和方法


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


构造函数用于定义实例属性,而原型模式用于定义方法和共享属性


function Person(name,age,job) {
this.name = name;
this.age = age;
this.job = job;
this.friends = ["vino","kobe"];
}

Person.prototype = {
constructor : Person,
sayName : function() {
alert(this.name);
}
}

var Person1 = new Person("vino24",22,"FE");

6.动态原型模式

function Person(name,age,job) {
this.name = name;
this.age = age;
this.job = job;

if(typeof this.sayName != "function") {
Person.prototype.sayName = function() {
alert(this.name);
};
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: