对Javascript系列(47)的深刻理解:对象创建模式(第一部分)
本文主要介绍了创建对象的模式,使用各种技术可以大大避免错误或编写非常简洁的代码。
模式1:名称空间(命名空间)
名称空间可以减少全局命名的数量,以避免命名冲突或过度。
复制代码代码如下所示:
VaR的应用程序| | { } =;
app.modulea = app.modulea | | { };
app.modulea.submodule = app.modulea.submodule | | { };
app.modulea.submodule.methoda =函数(){
console.log(打印);
};
app.modulea.submodule.methodb =函数(){
console.log(打印B);
};
如果有很多层次结构,它将继续下去,这是一个混乱。名称空间模式是为了解决这个问题,我们来看看代码:
复制代码代码如下所示:
/ /不安全,可能会改写现有的MyApp对象
VaR MyApp = { };
如果(typeof MyApp =未定义){
VaR MyApp = { };
}
/更简洁的方式
VaR MyApp = MyApp | | { };
定义一般方法
myapp.namespace =功能(ns_string){
无功部分= ns_string.split(' '),
父为MyApp,
我;
如果默认 / /第一节点MyApp,是不容忽视的,如myapp.modulea
如果(部分{ 0 } = MyApp){
Parts = parts.slice (1);
}
为(i = 0;i < parts.length;i = 1){
如果属性不存在,则创建该属性。
如果(typeof母{ } } = {我部分未定义){
{ } } {我父母部分= { };
}
父=父{ { } };
}
回报父母;
};
调用代码,非常简单:
复制代码代码如下所示:
通过名称空间,可以将返回值分配给本地变量。
VAR模2 = myapp.namespace('myapp。模块。模块2);
console.log(模2 = MyApp.模块。模块2); / /真的
跳过 / / MyApp
MYAPP.namespace('modules。module51);
非常长的名称
MYAPP.namespace(天。对。a.time。那里。是的。长。嵌套属性。);
模式2:定义依赖项
有时,模块的模块或函数可以引用第三方的模块或工具。最好在一开始就定义这些依赖项,以便以后可以很容易地替换它们。
复制代码代码如下所示:
var =函数MyFunction(){()
依赖模块
事件= yahoo.util.event VaR,
DOM = yahoo.util.dom;
在代码后面使用本地变量、事件和DOM /其他函数
};
模式3:私有财产和私有方法
Javascript没有提供特定的语法来支持私有属性和私有方法,但是我们可以通过闭包实现它。代码如下:
复制代码代码如下所示:
函数小工具(){
私有对象
变量名= 'ipod;
/公共功能
this.getname =函数(){
返回的名称;
};
}
新玩具();
未定义名称,是私有的
console.log(玩具的名字); / /未定义
用于访问名称的公共方法
Console.log((玩具。getName)); / / iPod
VaR myobj时; / /通过自我强化功能分配myobj时
(函数(){())
/免费对象
变量名=我的,我的;
公众/部分,所以没有var
myobj时= { {
授权方法
getName:函数(){
返回的名称;
}
};
}();
模式4:启示模式
是一种关于隐藏模式的私有方法,以及深入理解Javascript系列(3):模块模式的综合分析。在模块模式中有点类似,但不返回,但在外部声明变量,然后在内部分配变量的方法给公众:
复制代码代码如下所示:
VaR MyArray;
(函数(){())
VaR时={ } 对象数组
object.prototype.tostring toString =;
功能ISArray(){
返回tostring.call(一)=时;
}
功能指标(草垛、针){
var I=0,
马克斯= haystack.length;
(为;i < max;i = 1){
如果(草堆{ } =针){
还我;
}
}
返回- 1;
}
以赋值方式,最重要的是隐藏的细节。
MyArray = { {
ISArray:ISArray,
指标:指标,
InArray:指数
};
}();
/ /测试代码
console.log(myarray.isarray({ 1, 2 }) / /真实);
console.log(myarray.isarray(0:{ 1 }) / /假);
console.log(myarray.indexof(
console.log(myarray.inarray(
myarray.indexof = null;
console.log(myarray.inarray(
模式5:链式模式
连锁模式允许你调用一个对象的连续,如obj.add(1)(2)。删除。删除(4)加(2)。思考的方式很简单,也就是说,回到原来的样子:
复制代码代码如下所示:
var obj = { {
值:1,
增量:函数(){
this.value = 1;
返回此;
},
添加:函数(v){
this.value = V;
返回此;
},
函数(){
console.log(的价值);
}
};
链接方法调用
obj.increment(增加)(3)(。喊); / / 5
也可以是一个调用
obj.increment();
Obj.add(3);
Obj.shout();
总结
本文是对象创建模型的上部,请期待明天的下一部分。