javascript面向对象编程(二)
[javascript模拟传统OOP]
javascript是一种非常灵活的语言,它的灵活度足以让你模拟传统的OOP。主流的javascript框架大都实现了这个功能,这里给出我的实现办法:OOP.js(2k)。
[Class.create,创建类]
这个参考了大名鼎鼎的prototype框架的实现,不过也稍有不同。创建类的方法如下:程序演示页面(1)
JavaScript:
-
<script language="JavaScript" src="http://rssidea.com/labs/OOP/OOP.js"></script>
-
<script language="JavaScript">
-
//定义class,名为baseClass
-
var baseClass = Class.create({
-
//类属性
-
info: 'This is the original info',
-
//构造函数,统一命名init
-
init: function(str){
-
alert('Create a new class, ' + str + '!');
-
},
-
//类方法
-
setInfo: function(str){
-
this.info = str;
-
},
-
getInfo: function(){
-
return this.info;
-
}
-
});
-
//实例化一个类,同时执行构造函数init
-
var myClass = new baseClass("well done"); //Create a new class,well done!
-
alert(myClass.info);//This is the original info
-
alert(myClass.getInfo());//This is the original info
-
myClass.setInfo('This is the new info');
-
alert(myClass.getInfo());//This is the new info
-
</script>
[Class.add,添加原型方法]
javascript可以为类或实例在类定义以外的地方添加方法,甚至是在实例化类以后。而给某实例添加方法有两类,一类是添加原型方法,一类是添加实例方法。详情请看下面这段代码:程序演示页面(2)
JavaScript:
-
<script language="JavaScript" src="http://rssidea.com/labs/OOP/OOP.js"></script>
-
<script language="JavaScript">
-
var myClass = Class.create({
-
num: 0,
-
add: function(num){
-
return this.num + num;
-
},
-
init: function(num){
-
this.num = num;
-
}
-
})
-
var obj = new myClass(100);
-
var newObj = new myClass(10)
-
alert(obj.add(50));//alert 150
-
//增加原形方法
-
//你也可以使用原生的javascript添加myClass.prototype.add=function(){}
-
myClass.add({
-
multi: function(num){
-
return this.num * num;
-
}
-
});
-
//基于该原型的实例obj,newObj都获得了multi方法
-
alert(obj.multi(50));//alert 5000
-
alert(newObj.multi(5)); //alert 50
-
//增加实例方法
-
obj.sub = function(num){
-
return this.num - num;
-
}
-
//实例方法只对该实例有效
-
alert(obj.sub(50));//alert 50
-
alert(newObj.sub(5)); //error! newObj.sub is not a function
-
</script>