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 相关文章推荐
tagName的使用,留一笔
Jun 26 Javascript
分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码
Sep 21 Javascript
js函数名与form表单元素同名冲突的问题
Mar 07 Javascript
BOOTSTRAP时间控件显示在模态框下面的bug修复
Feb 05 Javascript
JavaScript判断前缀、后缀是否是空格的方法
Apr 15 Javascript
php基于redis处理session的方法
Mar 14 Javascript
JavaScript事件学习小结(三)js事件对象
Jun 09 Javascript
Vue.js实战之组件之间的数据传递
Apr 01 Javascript
在微信小程序中使用图表的方法示例
Apr 25 Javascript
js 实现ajax发送步骤过程详解
Jul 25 Javascript
js实现验证码功能
Jul 24 Javascript
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
Jan 13 Vue.js
在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
上传文件先创建目录 再上传到目录里面去
2010/12/29 PHP
PHP学习笔记(一) 简单了解PHP
2014/08/04 PHP
php 伪造ip以及url来路信息方法汇总
2014/11/25 PHP
PHP实现的购物车类实例
2015/06/17 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
2015/07/01 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
2016/07/09 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
2016/08/17 PHP
在 IE 中调用 javascript 打开 Excel 表
2006/12/21 Javascript
jquery UI 1.72 之datepicker
2009/12/29 Javascript
offsetHeight在OnLoad中获取为0的现象
2013/07/22 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
JavaScript数据结构与算法之栈详解
2015/03/12 Javascript
JavaScript动态修改弹出窗口大小的方法
2015/04/06 Javascript
js结合正则实现国内手机号段校验
2015/06/19 Javascript
整理JavaScript创建对象的八种方法
2015/11/03 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
2016/11/24 Javascript
微信小程序实现评论功能
2018/11/28 Javascript
微信小程序中weui用法解析
2019/10/21 Javascript
JS实现分页导航效果
2020/02/19 Javascript
three.js如何实现3D动态文字效果
2021/03/03 Javascript
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
Python实现遍历数据库并获取key的值
2015/05/17 Python
Python set常用操作函数集锦
2017/11/15 Python
python excel使用xlutils类库实现追加写功能的方法
2018/05/02 Python
Python使用sklearn实现的各种回归算法示例
2019/07/04 Python
python开发一个解析protobuf文件的简单编译器
2020/11/17 Python
Eton丹麦官网:精美的男式衬衫
2020/05/27 全球购物
演讲稿怎么写
2014/01/07 职场文书
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
孝老爱亲模范事迹材料
2014/05/25 职场文书
单位法定代表人授权委托书
2014/09/20 职场文书
电工实训报告总结
2014/11/05 职场文书
大学生活感想
2015/08/10 职场文书
幼儿园大班教师评语
2019/06/21 职场文书
创业计划书详解
2019/07/19 职场文书
HTML+CSS 实现顶部导航栏菜单制作
2021/06/03 HTML / CSS