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 相关文章推荐
仿谷歌主页js动画效果实现代码
Jul 14 Javascript
jquery简单实现网页层的展开与收缩效果
Aug 07 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
Sep 05 Javascript
浅析JavaScript访问对象属性和方法及区别
Nov 16 Javascript
javascript实现获取浏览器版本、浏览器类型
Dec 02 Javascript
学习使用bootstrap3栅格系统
Apr 12 Javascript
关于验证码在IE中不刷新的快速解决方法
Sep 23 Javascript
如何防止INPUT按回车自动提交表单FORM
Dec 06 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
Apr 21 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【圆形情况】
Dec 13 Javascript
Vue项目实现简单的权限控制管理功能
Jul 17 Javascript
swiper实现导航滚动效果
Dec 13 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
颠覆常识!无色透明的咖啡诞生了(中日双语)
2021/03/03 咖啡文化
Linux下创建nginx脚本-start、stop、reload…
2014/08/03 PHP
PHP查看SSL证书信息的方法
2016/09/22 PHP
php简单截取字符串代码示例
2016/10/19 PHP
Yii2处理密码加密及验证的方法
2019/05/12 PHP
PHP 构造函数和析构函数原理与用法分析
2020/04/21 PHP
js中获取事件对象的方法小结
2011/03/13 Javascript
Javascript创建自定义对象 创建Object实例添加属性和方法
2012/06/04 Javascript
JavaScript 用Node.js写Shell脚本[译]
2012/09/20 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
2013/01/24 Javascript
Javascript 垃圾收集机制介绍理解
2013/05/14 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
关于Javascript 对象(object)的prototype
2014/05/09 Javascript
网站接入QQ登录的两种方法
2014/07/22 Javascript
浅谈webpack组织模块的原理
2018/03/10 Javascript
jQuery替换节点元素的操作方法
2018/03/18 jQuery
微信小程序如何像vue一样在动态绑定类名
2018/04/17 Javascript
vue实现重置表单信息为空的方法
2018/09/29 Javascript
js实现同一个页面,多个enter事件绑定的示例
2018/10/10 Javascript
跨域请求两种方法 jsonp和cors的实现
2018/11/11 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
Vue实现背景更换颜色操作
2020/07/17 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
[01:08:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS LGD-CDEC
2014/05/22 DOTA
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
2018/12/19 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
python 常见的反爬虫策略
2020/09/27 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
英国最大的线上保健品零售商之一:Vitamin Planet
2016/12/01 全球购物
北美最大的零售退货翻新商:VIP Outlet
2019/11/21 全球购物
经典c++面试题六
2012/01/18 面试题
超市开业庆典策划方案
2014/05/14 职场文书
学校班班通实施方案
2014/06/11 职场文书
奉献家乡演讲稿
2014/09/13 职场文书
教师节感谢信
2015/01/22 职场文书