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 相关文章推荐
Dom 学习总结以及实例的使用介绍
Apr 24 Javascript
Jquery中children与find之间的区别详细解析
Nov 29 Javascript
在Node.js中实现文件复制的方法和实例
Jun 05 Javascript
通过JS来动态的修改url,实现对url的增删查改
Sep 01 Javascript
使用javascript实现简单的选项卡切换
Jan 09 Javascript
AngularJS之自定义服务详解(factory、service、provider)
Apr 14 Javascript
webpack+vue2构建vue项目骨架的方法
Jan 09 Javascript
jQuery niceScroll滚动条错位问题的解决方法
Feb 03 jQuery
vue element动态渲染、移除表单并添加验证的实现
Jan 16 Javascript
生产制造追溯系统之再说条码打印
Jun 03 Javascript
vue 遮罩层阻止默认滚动事件操作
Jul 28 Javascript
js异步接口并发数量控制的方法示例
Nov 22 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 无限分类三种方式 非函数的递归调用!
2011/08/26 PHP
json的键名为数字时的调用方式(示例代码)
2013/11/15 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
javascript奇异的arguments分析
2010/10/20 Javascript
如何在node的express中使用socket.io
2014/12/15 Javascript
JS中完美兼容各大浏览器的scrolltop方法
2015/04/17 Javascript
jquery实现简单的二级导航下拉菜单效果
2015/09/07 Javascript
JS实现的简洁纵向滑动菜单(滑动门)效果
2015/10/19 Javascript
值得分享和收藏的Bootstrap学习教程
2016/05/12 Javascript
js转html实体的方法
2016/09/27 Javascript
jQuery自定义插件详解及实例代码
2016/12/29 Javascript
Vue分页组件实例代码
2017/04/17 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
react-native动态切换tab组件的方法
2018/07/07 Javascript
深入理解JavaScript的async/await
2018/08/05 Javascript
关于layui 实现点击按钮添加一行(方法渲染创建的table)
2019/09/29 Javascript
[09:40]DAC2018 4.5 SOLO赛 MidOne vs Miracle
2018/04/06 DOTA
Python json模块使用实例
2015/04/11 Python
Python基于分水岭算法解决走迷宫游戏示例
2017/09/26 Python
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
2018/04/20 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
python中常用的数据结构介绍
2021/01/12 Python
菲律宾购物网站:Lazada菲律宾
2018/04/05 全球购物
意大利网上购书网站:Libraccio.it
2021/02/03 全球购物
常用UNIX 命令(Linux的常用命令)
2013/07/10 面试题
学生自我评价范文
2014/02/02 职场文书
大学生活动总结模板
2014/07/02 职场文书
授权委托书怎么写
2014/09/25 职场文书
考试作弊万能检讨书
2014/10/19 职场文书
食品质检员岗位职责
2015/04/08 职场文书
中学综治宣传月活动总结
2015/05/07 职场文书
2015年学校财务工作总结
2015/05/19 职场文书
php实例化对象的实例方法
2021/11/17 PHP
Python之matplotlib绘制饼图
2022/04/13 Python