[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>