Javascript 的函数式对象(一)利用闭包模拟类的私有变量和方法

在Javascript的框架开发中,面向对象式编程和面向函数式编程各有长处,因况而异。
除了在单例工厂中设置一些类型常量外,闭包通常被用来模拟类的私有变量和方法。
结合js的prototype机制,一个具有面向对象特点的js函数能够被以减少内存占用的形式实例化出来。
var MyNamespace = {};

MyNamespace.TreeItem = function (){

//使用闭包产生的私有类变量
var label, icon;

//可访问私有变量,但不可被外部访问的私有方法
function validate(){
}

//可访问私有变量,也可被外部访问的方法
this.setLabel = function( newLabel ){
label = newLabel;
validate();
};

this.getLabel = function(){
return label;
};

this.setIcon = function( newIcon ){
icon = newIcon;
validate();
};

this.getIcon = function(){
return icon;
};
};

// 该方法可被外部访问,却只能通过取/赋值器访问私有类变量
MyNamespace.TreeItem.prototype = {

print: function(){
console.log( this.getLabel() );
}

}

//实例化TreeItem类并调用其公共方法
var treeItem = new MyNamespace.TreeItem();
treeItem.setLabel('Hello World!');
treeItem.print();


每创建一个新的TreeItem实例,内存会为其私有变量,私有方法和所有能够访问私有变量和私有方法的方法开辟物理空间,而prototype中的方法始却始终只有一个。因此我们可以将那些不需要保存自身状态信息的方法放到js函数式对象的prototype中去,以节省浏览器的内存开销。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值