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实现奇偶行赋值不同css值
Feb 17 Javascript
JS获取后台Cookies值的小例子
Mar 04 Javascript
JS 退出系统并跳转到登录界面的实现代码
Jun 29 Javascript
JavaScript中闭包的写法和作用详解
Jun 29 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
Oct 31 Javascript
AngularJS执行流程详解
Feb 17 Javascript
利用js编写网页进度条效果
Oct 08 Javascript
vue实现微信二次分享以及自定义分享的示例
Mar 20 Javascript
vue+mock.js实现前后端分离
Jul 24 Javascript
layui使用label标签的方法
Sep 14 Javascript
JavaScript基于面向对象实现的无缝滚动轮播示例
Jan 17 Javascript
vue-simple-uploader上传成功之后的response获取代码
Sep 07 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
星际中一些鲜为人知的详细资料
2020/03/04 星际争霸
PHP中PDO基础教程 入门级
2011/09/04 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
2015/09/10 PHP
php实现mysql数据库连接操作及用户管理
2015/11/08 PHP
PHP随机数 C扩展随机数
2016/05/04 PHP
PHP基于递归实现的约瑟夫环算法示例
2017/08/27 PHP
用ASP将SQL搜索出来的内容导出为TXT的代码
2007/07/27 Javascript
jquery的颜色选择插件实例代码
2008/10/02 Javascript
js 浮动层菜单收藏
2009/01/16 Javascript
javascript中的缓动效果实现程序
2012/12/29 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
2014/05/11 Javascript
jQuery中scrollTop()方法用法实例
2015/01/16 Javascript
javascript实现验证身份证号的有效性并提示
2015/04/30 Javascript
教你使用javascript简单写一个页面模板引擎
2015/05/05 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
2016/03/17 Javascript
Windows 系统下设置Nodejs NPM全局路径
2016/04/26 NodeJs
Backbone中View之间传值的学习心得
2016/08/09 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
Angularjs中的页面访问权限怎么设置
2016/11/11 Javascript
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
socket io与vue-cli的结合使用的示例代码
2018/11/01 Javascript
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
在RedHat系Linux上部署Python的Celery框架的教程
2015/04/07 Python
编写Python脚本把sqlAlchemy对象转换成dict的教程
2015/05/29 Python
python实现验证码识别功能
2018/06/07 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
Django Form常用功能及代码示例
2020/10/13 Python
Paul’s Boutique官网:英国时尚手袋品牌
2018/03/31 全球购物
Book Depository欧盟:一家领先的国际图书零售商
2019/05/21 全球购物
在阿尔卑斯山或希腊度过快乐假期:Alpine Elements
2019/12/28 全球购物
如何手工释放资源
2013/12/15 面试题
公司活动策划方案
2014/01/13 职场文书
小学师德师风演讲稿
2014/09/02 职场文书
2014年财务工作总结与计划
2014/12/08 职场文书
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python