js 静态动态成员 and 信息的封装和隐藏


Posted in Javascript onMay 29, 2011

静态动态成员
一下用面向对象的相关概念来解释js中的仿面向对象,因为js中不像其他语言,不存在面向对象语言的相关特性,但可以通过一些技巧来模仿面向对象。我用同样的概念来概述js的这些方仿面向对象的概念,因为他们的行为作用类似。

在js中有如下函数

function test(){ 
var var_value; 
this.this_value; 
}

其中,var_value是静态成员,this_value是动态成员。

静态成员是关联到类本身的,只能在类的层次进行调用。这种特性是在实例化对象中var_value在内存中只保留一份,不会占用太多的内存。但他也有缺点,如果在继承方面上派生会有问题,无法派生。所以如果要派生子类,不宜采用此方法。

动态成员,这关联到对象上。这种做法是叫做门户大开型。在每一个该类的对象中在内存都存在一份属性和方法的副本,也就是说,实例化多少个对象,就有多少个内存副本。这在效率上来说不是件好事,但其实用可行性是比较高的。虽说内存占用多,不过也可以通过一些技巧来尽量的减少带来的内存开销。

暂时就讲这么多,也许有空空乏。不过在往后的随笔中会结合更多的例子,做更深层次剖析。

信息的封装和隐藏

简单来说就是如何处理信息。隐藏是目的,封装是达到目的用的技术。封装可以被定义为对对象内部的数据表现形式和实现细节进行隐藏。上面说到的成员问题也是信息处理的途径,这里是如何用这些成员来封装,当然,还有用到其他东西。

通常封装用的比较广泛的几种依据是:作用域、嵌套函数、闭包,这些概念上有交集,要共同来达到目的。至于具体怎么封装也难以解释,在往后的随笔中同样会结合更多的例子做更深层次的剖析。

封装的优点是:保持了内部数据的完整性和逻辑性,它对变量实施了限制和约束。弱化模块间耦合。

缺点是:封装后的js代码有大部分是复杂的,因为js实现封装本身就比较难,不像其他语言。这也是js灵活的双刃剑。封装后的代码调试起来也比较困难,这需要更分钟的作用域打交道,也依靠强大的调试工具。假如程序用的是一种设计模式,如果对于一个不熟悉某种模式的程序员是会觉得难以理解的。这就需要借助良好的代码注释或说明文档了。

Javascript 相关文章推荐
Jquery 绑定时间实现代码
May 03 Javascript
js中style.display=""无效的解决方法
Oct 30 Javascript
JavaScript实现多个重叠层点击切换效果的方法
Apr 24 Javascript
jquery事件的ready()方法使用详解
Nov 11 Javascript
jquery正则表达式验证(手机号、身份证号、中文名称)
Dec 31 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
Jul 11 Javascript
浅析Visual Studio Code断点调试Vue
Feb 27 Javascript
Babel 入门教程学习笔记
Jun 13 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
Sep 14 Javascript
React 组件中的 bind(this)示例代码
Sep 16 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
Dec 12 Javascript
微信小程序获取当前时间及星期几的实例代码
Sep 20 Javascript
在JavaScript中监听IME键盘输入事件
May 29 #Javascript
解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码
May 28 #Javascript
Jquery css函数用法(判断标签是否拥有某属性)
May 28 #Javascript
最新28个很棒的jQuery 教程
May 28 #Javascript
JavaScript使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法
May 28 #Javascript
真正的JQuery.ajax传递中文参数的解决方法
May 28 #Javascript
jquery 图片上传按比例预览插件集合
May 28 #Javascript
You might like
在字符串指定位置插入一段字符串的php代码
2010/02/16 PHP
thinkPHP5.0框架API优化后的友好性分析
2017/03/17 PHP
Yii2第三方类库插件Imagine的安装和使用
2017/07/06 PHP
Laravel中为什么不使用blpop取队列详析
2018/08/01 PHP
js跟随滚动条滚动浮动代码
2009/12/31 Javascript
javascript 函数参数限制说明
2010/11/19 Javascript
Jqyery中同等与js中windows.onload的应用
2011/05/10 Javascript
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
两个select多选模式的选项相互移动(示例代码)
2014/01/11 Javascript
7个JS基础知识总结
2014/03/05 Javascript
编写简单的jQuery提示插件
2014/12/21 Javascript
JS获取iframe中longdesc属性的方法
2015/04/01 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
2016/05/28 Javascript
js点击按钮实现水波纹效果代码(CSS3和Canves)
2016/09/15 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
2016/10/19 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
layui 实现自动选择radio单选框(checked)的方法
2019/09/03 Javascript
JavaScript canvas动画实现时钟效果
2020/02/10 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
2020/05/10 Javascript
Python选择排序、冒泡排序、合并排序代码实例
2015/04/10 Python
Python编程入门之Hello World的三种实现方式
2015/11/13 Python
Python3匿名函数用法示例
2018/07/25 Python
Flask模板引擎之Jinja2语法介绍
2019/06/26 Python
Python Pandas数据中对时间的操作
2019/07/30 Python
基于python traceback实现异常的获取与处理
2019/12/13 Python
基于Python把网站域名解析成ip地址
2020/05/25 Python
python 实现百度网盘非会员上传超过500个文件的方法
2021/01/07 Python
英国最大的体育&时尚零售公司:JD Sports
2017/12/13 全球购物
C#可否对内存进行直接的操作
2015/02/26 面试题
医院护士专业个人的求职信
2013/12/09 职场文书
终止劳动合同协议书
2014/04/14 职场文书
禁止酒驾标语
2014/06/25 职场文书
慰问信(范文3篇)
2019/10/23 职场文书
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python