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 相关文章推荐
JS 实现双色表格实现代码
Nov 24 Javascript
jQuery版仿Path菜单效果
Dec 15 Javascript
由ReactJS的Hello world说开来
Jul 02 Javascript
smartcrop.js智能图片裁剪库
Oct 14 Javascript
基于Vuejs框架实现翻页组件
Jun 29 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
Feb 13 Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
Jul 20 Javascript
详解如何构建Promise队列实现异步函数顺序执行
Oct 23 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
Apr 23 Javascript
Vue仿微信app页面跳转动画效果
Aug 21 Javascript
Vue切换div显示隐藏,多选,单选代码解析
Jul 14 Javascript
关于Javascript闭包与应用的详解
Apr 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编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
PHP中的按位与和按位或操作示例
2014/01/27 PHP
Linux下创建nginx脚本-start、stop、reload…
2014/08/03 PHP
PHP实现文件下载详解
2014/11/27 PHP
教你php如何实现验证码
2016/01/20 PHP
PHP抽象类与接口的区别详解
2019/03/21 PHP
Prototype Number对象 学习
2009/07/19 Javascript
js类的静态属性和实例属性的理解
2009/10/01 Javascript
学习ExtJS table布局
2009/10/08 Javascript
用Javascript同时提交多个Web表单的方法
2009/12/26 Javascript
easyui form validate总是返回false的原因及解决方法
2016/11/07 Javascript
js阻止移动端页面滚动的两种方法
2017/01/25 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
2018/12/12 Javascript
JS实现打砖块游戏
2020/02/14 Javascript
JavaScript 闭包的使用场景
2020/09/17 Javascript
wxPython使用系统剪切板的方法
2015/06/16 Python
横向对比分析Python解析XML的四种方式
2016/03/30 Python
Python排序搜索基本算法之插入排序实例分析
2017/12/11 Python
Python入门学习指南分享
2018/04/11 Python
python traceback捕获并打印异常的方法
2018/08/31 Python
python实现电子书翻页小程序
2019/07/23 Python
Python环境管理virtualenv&virtualenvwrapper的配置详解
2020/07/01 Python
详解python模块pychartdir安装及导入问题
2020/10/22 Python
python中判断数字是否为质数的实例讲解
2020/12/06 Python
HTML5 使用 sessionStorage 进行页面传值的方法
2018/07/02 HTML / CSS
美国眼镜网站:EyeBuyDirect
2017/04/13 全球购物
德国传统玻璃制造商:Cristalica
2018/04/23 全球购物
澳洲网红粉泥面膜:Sand & Sky
2019/08/13 全球购物
普天C++笔试题
2016/03/20 面试题
五分钟演讲稿
2014/04/30 职场文书
村党的群众路线教育实践活动总结材料
2014/10/31 职场文书
信息技术教研组工作总结
2015/08/13 职场文书
护士医德医风心得体会
2016/01/25 职场文书
2019让人心动的商业计划书
2019/06/27 职场文书
班干部竞选演讲稿(精选5篇)
2019/09/24 职场文书
SpringBoot2零基础到精通之异常处理与web原生组件注入
2022/03/22 Java/Android