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 相关文章推荐
IE8提示Invalid procedure call or argument 异常的解决方法
Sep 30 Javascript
JS模拟自动点击的简单实例
Aug 08 Javascript
JavaScript判断密码强度(自写代码)
Sep 06 Javascript
jquery div拖动效果示例代码
Dec 08 Javascript
使用jquery prev()方法找到同级的前一个元素
Jul 11 Javascript
text-align:justify实现文本两端对齐 兼容IE
Aug 19 Javascript
JS iFrame加载慢怎么解决
May 13 Javascript
BootStrap 弹出层代码
Feb 09 Javascript
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
Jun 17 Javascript
angularJs中json数据转换与本地存储的实例
Oct 08 Javascript
js定义类的方法示例【ES5与ES6】
Jul 30 Javascript
RxJS在TypeScript中的简单使用详解
Apr 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
PHP 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
2006/10/09 PHP
header跳转和include包含问题详解
2012/09/08 PHP
基于php无限分类的深入理解
2013/06/02 PHP
探讨:parse url解析URL,返回其组成部分
2013/06/14 PHP
深入apache配置文件httpd.conf的部分参数说明
2013/06/28 PHP
php生成随机数的三种方法
2014/09/10 PHP
php导出生成word的方法
2015/12/25 PHP
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
Mootools 1.2教程 排序类和方法简介
2009/09/15 Javascript
Jquery 插件学习实例1 插件制作说明与tableUI优化
2010/04/02 Javascript
jQuery循环滚动新闻列表示例代码
2014/06/17 Javascript
jQuery实现仿Alipay支付宝首页全屏焦点图切换特效
2015/05/04 Javascript
全面理解JavaScript中的闭包
2016/05/12 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
2016/12/07 Javascript
深入理解Javascript中的作用域链和闭包
2017/04/25 Javascript
JavaScript实现购物车基本功能
2017/07/21 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
jquery radio 动态控制选中失效问题的解决方法
2018/02/28 jQuery
vue中添加mp3音频文件的方法
2018/03/02 Javascript
JS代码实现电脑配置检测功能
2018/03/21 Javascript
react-native动态切换tab组件的方法
2018/07/07 Javascript
打通前后端构建一个Vue+Express的开发环境
2018/07/17 Javascript
详解使用Nuxt.js快速搭建服务端渲染(SSR)应用
2019/03/13 Javascript
JS中call()和apply()的功能及用法实例分析
2019/06/28 Javascript
跟老齐学Python之坑爹的字符编码
2014/09/28 Python
Python实现画图软件功能方法详解
2020/07/28 Python
python利用后缀表达式实现计算器功能
2021/02/22 Python
复古服装:RetroStage
2019/05/10 全球购物
房地产项目策划书
2014/02/05 职场文书
党的群众路线教育实践活动个人整改落实情况汇报
2014/10/28 职场文书
2014年仓库管理工作总结
2014/12/17 职场文书
清洁工个人总结
2015/03/04 职场文书
红歌会主持词
2015/07/02 职场文书
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers