js库封装之OO

对于jsOO方法和属性的写法

其实OO中方法和属性重要的就在于封装,隐藏信息,实践中我尝试了下面有三种写法,用来封装js库。

但js对象本身是随时都可以改变的,因此不是真OO。

最让搞java出身的我郁闷的是类的静态方法属性实例竟然木有,要通过constructor来访问


//1.闭包私有变量:
var MyClass = function()
{
//闭包私有变量,跟java里的私有变量一样,
//外部只能用getter setter来修改变量 _nane
var _name = 'MyClass';

this.setName = function(name){
_name = name;
};
this.getName = function(){
return _name;
}
};
var myclass = new MyClass();
alert(myclass.getName());
myclass.setName(123);
alert(myclass.getName());
//上面的写法中 如果用户写成了如下写法:
alert(myclass.getName);
alert(myclass.setName);
//可以打印出方法是怎么实现的具体细节,


//2.隐藏内部方法细节:这种方法一般用于隐藏用纯js封装的安全性方法,牺牲了性能,当然这段js要直接eval,不能被F12出来。
(function(){
var MyClass = function()
{
//闭包私有变量,跟java里的私有变量一样,
//外部只能用getter setter来修改变量 _nane
var _name = 'MyClass';

function _setName(name){
_name = name;
}

this.setName = function(name){
_setName(name)
};

function _getName(){
return _name;
}

this.getName = function(){
return _getName();
}
};

window.MyClass =function(){
MyClass.apply(this);
};
})();
var myclass = new MyClass();
var myclass = new MyClass();
alert(myclass.getName());
myclass.setName(123);
alert(myclass.getName());
//这回看不到_name了,方法的细节被闭包了,但明显有一倍的对象开销
alert(myclass.getName);
alert(myclass.setName);


//3.全裸露属性
var MyClass = function()
{
//这是私有变量不需要被直接修改,但外部可以直接访问和修改,但这样导致的结果不可预测
this._innerName = 'innerName'+'__MyClass';
//提供这个方法以保证可用的
this.setInnerName = function(innerName){
//innerName的一些特殊处理逻辑,比如有特殊后缀
this._innerName = innerName+'__MyClass'
};

this.outerName = 'outName';
};
var myClass = new MyClass();
myClass.setInnerName('newInnerName');//
myClass._innerName ='newInnerName';//缺少后缀了,导致的依赖于此的逻辑出错。
myClass.outerName = 'newOutName';//能直接访问干嘛要getter setter。

 //Ext是js的OOP做得最好的了,但也有点笨重,有空研究了再补充


对于继承

http://www.w3school.com.cn/js/pro_js_inheritance_implementing.asp


function extend(self,sup,override){
for(var o in sup){
if(self.hasOwnProperty(o) && !override){
continue;
}
self[o] = sup[o];
}
}



命名空间和包
javascript中没有真正的包,有命名空间和包都有避免重名的作用,对js文件的管理使用文件目录的,完全可以用文件目录和命名空间共同来实现java中包的功能,这里需要用到动态加载机制,当然良好的抽象和设计是基础。


Ext是js的OOP做得最好的了,但也有点笨重,有空研究了再补充
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值