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 相关文章推荐
javascript json2 使用方法
Mar 16 Javascript
JavaScript 笔记二 Array和Date对象方法
May 22 Javascript
js数组操作常用方法
May 08 Javascript
JavaScript中window.showModalDialog()用法详解
Dec 18 Javascript
js实现根据身份证号自动生成出生日期
Dec 15 Javascript
使用开源工具制作网页验证码的方法
Oct 17 Javascript
jQuery Ajax全解析
Feb 13 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
Aug 24 Javascript
vue组件发布到npm简单步骤
Nov 30 Javascript
react+redux仿微信聊天界面
Jun 21 Javascript
Vue.js计算机属性computed和methods方法详解
Oct 12 Javascript
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
Nov 06 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函数解决SQL injection
2006/10/09 PHP
php判断正常访问和外部访问的示例
2014/02/10 PHP
PHP IDE PHPStorm配置支持友好Laravel代码提示方法
2015/05/12 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
PHP之将POST数据转化为字符串的实现代码
2016/11/03 PHP
thinkphp中AJAX返回ajaxReturn()方法分析
2016/12/06 PHP
php中namespace及use用法分析
2016/12/06 PHP
Laravel5.7框架安装与使用学习笔记图文详解
2019/04/02 PHP
php5对象复制、clone、浅复制与深复制实例详解
2019/08/14 PHP
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
2015/12/31 Javascript
多功能jQuery树插件zTree实现权限列表简单实例
2016/07/12 Javascript
Vue路由跳转问题记录详解
2017/06/15 Javascript
jQuery上传插件webupload使用方法
2017/08/01 jQuery
jQueryMobile之窗体长内容的缺陷与解决方法实例分析
2017/09/20 jQuery
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
ant design vue 表格table 默认勾选几项的操作
2020/10/31 Javascript
Python中使用中文的方法
2011/02/19 Python
对于Python的Django框架部署的一些建议
2015/04/09 Python
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
2015/04/25 Python
Python制作简单的网页爬虫
2015/11/22 Python
利用Python获取操作系统信息实例
2016/09/02 Python
django实现用户注册实例讲解
2019/10/30 Python
Python字符串的修改方法实例
2019/12/19 Python
python实现程序重启和系统重启方式
2020/04/16 Python
Django model class Meta原理解析
2020/11/14 Python
html5 touch事件实现触屏页面上下滑动(一)
2016/03/10 HTML / CSS
解决HTML5中滚动到底部的事件问题
2019/08/22 HTML / CSS
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
初中美术教学反思
2014/01/29 职场文书
安全保证书怎么写
2015/02/28 职场文书
2015年技术员工作总结
2015/04/10 职场文书
2015年结对帮扶工作总结
2015/05/04 职场文书
冲出亚马逊观后感
2015/06/03 职场文书
爱国教育主题班会
2015/08/14 职场文书