[b]最近想总结一下JavaScript类编程,有时间写一点。
JavaScript本身是基于原型的,这与普通基于类的编程语言相比,在实现继承的机制上有较大的出入。Javascript 创建一个新类那便是修改了某个对象原型(prototype)的结果。
[/b]
[b]单例(Singletons)[/b]
在JavaScript的单例模式中,我们常常会创建似有Javascript变量或通过高明的必包手法建立似有的方法,以一段程序入口的范例代码就能说明多少问题。
//以下信息来源于Apress.pro.Javascript.design.patterns ,翻译如下(原创非转载):
the basic Structure of the Singleton
单例的基本结构
在这个例子中,所有的成员可以通过单例变量访问到。 你可以通过使用.来访问它们:
(you can access them using the dot notation)
Singleton.attribute1 = false;
var total = Singleton.attribute2 + 5 ;
var result = Singleton.method1();
单例对象可以被修改。你可以添加新的成员。你也可以删除成员,使用关键字[color=darkred]"delete"[/color]
A singleton with private members(一个含有私有成员的单例)
因为单例对象仅仅实例化一次,所有我们可以使用正确私有方法而无需但无需担心内存。
1 使用[color=red]下划线符号[/color]
在一个单例对象中创建一个私有成员最简单和直接的方法是使用下划线符号。这种方式可以让其他编程者知道这个方法或者属性是私有的,而且只能用在对象的内部。
JavaScript本身是基于原型的,这与普通基于类的编程语言相比,在实现继承的机制上有较大的出入。Javascript 创建一个新类那便是修改了某个对象原型(prototype)的结果。
[/b]
[b]单例(Singletons)[/b]
在JavaScript的单例模式中,我们常常会创建似有Javascript变量或通过高明的必包手法建立似有的方法,以一段程序入口的范例代码就能说明多少问题。
MyApp = function() {
var data ;//外部无法访问data,这是私有成员
return {
init : function() {
...
},
getData : function() {
return data;
}
}
}
//以下信息来源于Apress.pro.Javascript.design.patterns ,翻译如下(原创非转载):
the basic Structure of the Singleton
单例的基本结构
/*
Basic Singleton
*/
var Singleton = {
attribute1 : true ,
attribute2 : 10,
method1 : function() {
},
method2 : function(arg) {
}
}
在这个例子中,所有的成员可以通过单例变量访问到。 你可以通过使用.来访问它们:
(you can access them using the dot notation)
Singleton.attribute1 = false;
var total = Singleton.attribute2 + 5 ;
var result = Singleton.method1();
单例对象可以被修改。你可以添加新的成员。你也可以删除成员,使用关键字[color=darkred]"delete"[/color]
A singleton with private members(一个含有私有成员的单例)
因为单例对象仅仅实例化一次,所有我们可以使用正确私有方法而无需但无需担心内存。
1 使用[color=red]下划线符号[/color]
在一个单例对象中创建一个私有成员最简单和直接的方法是使用下划线符号。这种方式可以让其他编程者知道这个方法或者属性是私有的,而且只能用在对象的内部。
/*
DataParser singleton ,converts character delimited strings into arrays.
*/
GiantCorp.DataParser = {
//private methods . 私有方法
//清除空格
_stripWhitespace :function(str) {
return str.replace(/\s+/,'');
},
//字符串分割 delimiter)(分隔符)
_stringSplit : function(str,delimiter) {
return str.split(delimiter);
},
//public method
stringToArray : function(str,delimiter,stripWS) {
if(stringWS) {
str = this._stripWhitespace(str);
}
var outputArray = this._stringSplit(str,delimiter);
return outputArray ;
}
}