在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中去,以节省浏览器的内存开销。
分享到:
相关推荐
JavaScript缺少块级作用域,没有private修饰符,但它具有函数作用域。作用域的好处是内部函数可以访问它们的外部函数的参数和变量(除了this和argument
深度探讨javascript函数的原型链和闭包
理解javascript函数式编程中的闭包(closure)_.docx
主要介绍了JavaScript闭包函数访问外部变量的方法,本文使用匿名函数来实现在闭包中访问外部变量,需要的朋友可以参考下
本文给大家简单介绍了在一个项目中涉及到的javascript使用闭包模拟对象的私有属性和方法,这里记录下来,分享给大家。
全书共9章,分别介绍了JavaScript函数式编程、一等函数与Applicative编程、变量的作用域和闭包、高阶函数、由函数构建函数、递归、纯度和不变性以及更改政策、基于流的编程、类编程。除此之外,附录中还介绍了更多...
即使JavaScript中没有正式的私有对象属性的概念,但可以使用闭包来实现公有方法,而通过公有方法可以访问在包含作用域中定义的变量; 有权访问私有变量的公有方法叫做特权方法; 可以使用构造函数模式、原型模式...
全书共9章,分别介绍了JavaScript函数式编程、一等函数与Applicative编程、变量的作用域和闭包、高阶函数、由函数构建函数、递归、纯度和不变性以及更改政策、基于流的编程、类编程。除此之外,附录中还介绍了更多...
闭包是ECMAScript (JavaScript)最强大的特性之一,但用好闭包的前提是必须理解闭包。闭包的创建相对容易,人们甚至会在不经意间创建闭包,但这些无意创建的闭包却存在潜在的危害,尤其是在比较常见的浏览器环境下...
主要帮助大家理解javascript函数式编程中的闭包(closure)概念,通俗地讲, JavaScript 中每个的函数都是一个闭包,感兴趣的小伙伴们可以参考一下
本文实例讲述了JavaScript私有变量。...如果在这个函数内部创建一个闭包,那么闭包通过自己的作用域链也可以访问这些变量,利用这一点,就可以创建用于访问私有变量的公有方法。 有权访问私有变量和私有函数的公有方法
js代码-函数表达式 闭包 私有变量
具体来说实现模拟面向对象主要是利用JavaScript函数闭包这个概念。由于JavaScript中的每一个function都会形成一个作用域,而如果变量声明在这个域中,那么外部是无法直接去访问,要想访问必须new出一个实例来,相当...
闭包是纯函数式编程语言的传统特性之一。通过将闭包视为核心语言构件的组成部分,JavaScript语言展示了其与函数式编程语言的紧密联系。由于能够简化复杂的操作,闭包在主流JavaScript库以及高水平产品代码中日益...
本篇文章对Javascript中函数、递归与闭包(执行环境、变量对象与作用域链)的使用进行了详细的分析介绍。需要的朋友参考下