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 处理表单元素的代码
Feb 15 Javascript
JavaScript 编写匿名函数的几种方法
Feb 21 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
May 18 Javascript
JQUERY的属性选择符和自定义选择符使用方法(二)
Apr 07 Javascript
回车直接实现点击某按钮的效果即触发单击事件
Feb 27 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
Aug 20 Javascript
基于JavaScript短信验证码如何实现
Jan 24 Javascript
JavaScript动态添加事件之事件委托
Jul 12 Javascript
微信小程序-拍照或选择图片并上传文件
Jan 06 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
Apr 01 jQuery
JSON.stringify()方法讲解
Jan 31 Javascript
vue element-ui实现input输入框金额数字添加千分位
Dec 29 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
windows xp下安装pear
2006/12/02 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
2012/01/10 PHP
php处理文件的小例子(解压缩,删除目录)
2013/02/03 PHP
Codeigniter校验ip地址的方法
2015/03/21 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
2016/03/23 PHP
PHP三种方式实现链式操作详解
2017/01/21 PHP
php实现购物车功能(以大苹果购物网为例)
2017/03/09 PHP
从JavaScript 到 JQuery (1)学习小结
2009/02/12 Javascript
响应鼠标变换表格背景或者颜色的代码
2009/03/30 Javascript
javascript URL编码和解码使用说明
2010/04/12 Javascript
javascript中callee与caller的用法和应用场景
2010/12/08 Javascript
js闭包实现按秒计数
2015/04/23 Javascript
react-native 圆弧拖动进度条实现的示例代码
2018/04/12 Javascript
node.js部署之启动后台运行forever的方法
2018/05/23 Javascript
vue-cli项目无法用本机IP访问的解决方法
2018/09/20 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
2019/01/31 Javascript
python进阶教程之词典、字典、dict
2014/08/29 Python
Python实现栈的方法
2015/05/26 Python
详解Python多线程
2016/11/14 Python
Python 基础之字符串string详解及实例
2017/04/01 Python
Django实现快速分页的方法实例
2017/10/22 Python
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
2020/05/18 Python
浅谈pycharm导入pandas包遇到的问题及解决
2020/06/01 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
2020/10/14 Python
纯CSS3代码实现switch滑动开关按钮效果
2016/08/30 HTML / CSS
奥地利网上书店:Weltbild
2017/07/14 全球购物
如何开发安全的AJAX应用
2014/03/26 面试题
学期自我鉴定范文
2013/10/01 职场文书
好习惯伴我成长演讲稿
2014/05/21 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
合作与交流自我评价
2015/03/09 职场文书
优秀班干部主要事迹材料
2015/11/04 职场文书
Python实现位图分割的效果
2021/11/20 Python
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL