|
版本: |
|
小版本号: |
|
|
|
数据库: |
|
服务器操作系统: |
|
应用服务器: |
|
客户端操作系统: |
|
浏览器: |
|
|
|
本帖最后由 腹部流出的肉 于 2014-9-21 15:32 编辑
共勉一下下
1.传统的方式 var box = new Object();
2.字面量的方式 var box = {};
3.工厂模式(方法名小写、在内部显示地创建对象、返回对象)
function box(name,age){
var box = new Object();
box.name = name;
box.age = age;
box.run = function(){
return this.name + this.age + "运行中... ...";
}
}
不能解决对象识别的问题
4.构造函数模式(方法名大写、内部隐式地创建对象、不方法对象而是后台隐式地返回对象)
function Box(name,age){
this.name = name;
this.age = age;
this.run = function(){
return this.name + this.age + "运行中... ...";
}
}
能解决对象识别问题,不能解决共享问题
5.原型模式
function Box(){}
Box.prototype.name = "bin.z";
Box.protype.age = 22;
Box.prototype.run = function(){
return this.name + this.age + "运行中... ...";
};
解决了共享问题,可是出现了对象传参问题和数据共享问题
6.组合构造函数 + 原型模式
function Box(name,age){
this.name = name;
this.age = age;
}
Box.prototype = {
constructor : Box,
run : function(){
return this.name + this.age + "运行中... ...";
}
}
不够封装
7.修改后的组合构造函数 + 原型模式(动态原型模式)
function Box(name,age){
//给实例对象添加属性或方法
this.name = name;
this.age = age;
//添加方法
//... ...
//给类型原型对象添加属性或方法
//添加属性
//... ...
Box.prototype.run = function(){
return this.name + this.age + "运行中... ...";
}
}
8.组合构造函数模式 + 工厂模式 (构造函数模式寄生工厂模式、寄生模式、寄生构造模式)
function Box(name,age){
var box = new Object();
box.name = name;
box.age = age;
box.run = function(){
return this.name + this.age + "运行中... ...";
};
return box;
}
//寄生构造模式调用 Box(name,age) 或 new Box(name,age)
9.稳妥构造函数(在不允许使用this[函数中不允许出现]和new[调用中不允许出现]的时候使用)
function Box(name,age){
var box = new Object();
box.name = name;
box.age = age;
box.run = function(){
return name + age + "运行中... ...";
};
return box;
}
如果调用使用了 new Box(name,age)就是稳妥构造函数模式,稳妥构造模式在调用的时候不使用new Box(name,age)
不管是工厂模式、组合构造函数模式 + 工厂模式(寄生构造模式)、 稳妥构造模式(寄生构造模式的变化)都是不能解决对象识别问题的
其实最最最常用的模式是字面量模式和组合构造函数模式 + 原型模式 ,还有就是动态原型模式了
特别解析一下8
/*
【
1.通过内置引用类型添加属性或方法不太好,因这样可能会出现属性名和方法名重复的现象 不推荐使用
2.可以通过工厂模式或组合构造函数+工厂模式(构造函数寄生工厂模式、寄生模式、寄生构造函数模式)
工厂模式
function extendType(){//可以传递参数
var similarPrototype = new Type();//在工厂模式中创建的对象就像原型对象(因为这是为了替换Type.prototype.newFunction = function(){}),Type只是一种类型哟... ...
similarPrototype.extendedFunctionName = function(/*** 参数列表 ***/) {/*** 函数体 ***/}
return similarPrototype;
}
组合构造函数 + 工厂模式
function ExtendType(){
var similarPrototype = new Type();
similarPrototype.extendedFunctionName = function(*** 参数列表 ***) {*** 函数体 ***}
return similarPrototype;
}
//通过工厂模式或组合构造函数 + 工厂模式 解决了通过原型对象直接添加属性或方法对原型对象的破坏,而使用了一个类原型对象similarPrototype
//来解决问题,但这种方式必直接通过原型对象添加属性或方法要慢很多... ...
】
*/
|
评分
-
查看全部评分
|