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 Keycode对照表
Oct 24 Javascript
cnblogs 代码高亮显示后的代码复制问题解决实现代码
Dec 14 Javascript
js+css实现增加表单可用性之提示文字
Jun 03 Javascript
node.js中的fs.writeFile方法使用说明
Dec 14 Javascript
JS跨域请求外部服务器的资源
Feb 06 Javascript
JS实现复制功能
Mar 01 Javascript
footer定位页面底部(代码分享)
Mar 07 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
Sep 22 Javascript
解析Vue2 dist 目录下各个文件的区别
Nov 22 Javascript
angularJs中orderBy筛选以及filter过滤数据的方法
Sep 30 Javascript
微信小程序iOS下拉白屏晃动问题解决方案
Oct 12 Javascript
vue-router 中 meta的用法详解
Nov 01 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
使用MaxMind 根据IP地址对访问者定位
2006/10/09 PHP
利用PHP扩展vld查看PHP opcode操作步骤
2013/03/04 PHP
php 无法加载mcrypt.dll的解决办法
2013/04/03 PHP
php中通过curl检测页面是否被百度收录
2013/09/27 PHP
JavaScript实现的日期控件具体代码
2013/11/18 Javascript
JavaScript检测字符串中是否含有html标签实现方法
2015/07/01 Javascript
Javascript中this关键字指向问题的测试与详解
2017/08/11 Javascript
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
2019/04/26 Javascript
Jquery动态列功能完整实例
2019/08/30 jQuery
JS实现电脑虚拟键盘的操作
2020/06/24 Javascript
[01:18:33]Secret vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
[51:32]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
Python中运行并行任务技巧
2015/02/26 Python
Python reduce()函数的用法小结
2017/11/15 Python
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
python中format()函数的简单使用教程
2018/03/14 Python
python 使用值来排序一个字典的方法
2018/11/16 Python
Python将字符串常量转化为变量方法总结
2019/03/17 Python
python代理工具mitmproxy使用指南
2019/07/04 Python
Django Rest framework权限的详细用法
2019/07/25 Python
django框架用户权限中的session缓存到redis中的方法
2019/08/06 Python
在Django下测试与调试REST API的方法详解
2019/08/29 Python
基于Python 中函数的 收集参数 机制
2019/12/21 Python
使用python 计算百分位数实现数据分箱代码
2020/03/03 Python
使用SQLAlchemy操作数据库表过程解析
2020/06/10 Python
美国体育用品商店:Paragon Sports
2017/10/08 全球购物
英国男士时尚购物网站:Stuarts London
2017/10/22 全球购物
中职生自我鉴定范文
2013/10/03 职场文书
大学毕业生自我鉴定
2013/11/05 职场文书
电脑专业个人求职信范文
2014/02/04 职场文书
《我的第一本书》教学反思
2014/02/15 职场文书
小学语文教学经验交流材料
2014/06/02 职场文书
2015年大学生入党自荐书
2015/03/24 职场文书
防卫过当辩护词
2015/05/21 职场文书
Linux中Nginx的防盗链和优化的实现代码
2021/06/20 Servers
Windows7下FTP搭建图文教程
2022/08/05 Servers