研磨JavaScript系列(二):没有类
object就是对象的类型。在JavaScript中不管多么复杂的数据和代码。都可以组织成object形式的对象。
但JavaScript没有"类"概念。
看下面这段JavaScript代码:
<script type="text/javascript">
var life = {}; //光溜溜的生命对象 for(life.age = 1; life.age <= 3; life.age++){
switch(life.age){
case 1:
life.body = "卵细胞"; //增加body属性
life.say = function(){alert(life.age + life.body);} //新建say()方法
break;
case 2:
life.tail = "尾巴"; //增加tail属性
life.gill = "腮"; //增加gill属性
life.body = "蝌蚪";
life.say = function(){alert(life.age + life.tail + life.gill + life.body);}
break;
case 3:
delete life.tail; //删除tail属性
delete life.gill; //删除gill属性
life.leg = "四肢"; //增加leg属性
life.lung = "肺"; //增加lung属性
life.body = "青蛙";
life.say = function(){alert(life.age + life.leg + life.lung + lifed.body);}
break;
}
life.say(); //调用say()方法,此方法逻辑每次都会动态改变
}
</script>
这一段JavaScript程序一开始产生了一个生命对象life,life诞生时只有一个光溜溜的对象,没有任何属性和方法。
在第一次生命过程中,他有了一个身体属性body,并有了一个say()方法,看起来是一个卵细胞。
在第二次生命过程中,他又长出了尾巴和腮,有了tail和gill属性,显示他是一个蝌蚪。
在第三次生命过程中,它的tail和gill属性消失了,但又长出了四肢和肺,有了leg和lung属性,从而最终成为了青蛙。
还记得儿时,那个小蝌蚪找妈妈的童话故事吗?可爱的小蝌蚪也就是在其自身类型的不断演化过程中,逐渐变成了妈妈一样的"类",从而找到了自己的妈妈。这个故事中蕴含的编程哲理就是:对象的"类"是从无到有,又不断演化,最终又消失于无形中。。。。
"类",的确可以帮助我们理解复杂的现实世界,这纷乱的现实世界的确需要进行分类。但如果我们的思想被"类"束缚住了,"类"也就变成了"累"。如果一个生命对象开始时就被规定了固定的"类",那么他还能演化吗?
所以JavaScript中没有"类",类已化于无形,与对象融为一体。正是由于放下了"类"这个概念,JavaScript的对象才有了其他编程语言所没有的活力。
文章声明:本文部分内容参考自《悟透JavaScript》,这是一本学习JavaScript非常好的书。
研磨JavaScript系列(二):没有类的更多相关文章
- 研磨JavaScript系列
JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言.同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种操作.它最初由网景公司 ...
- c/c++ 模板与STL小例子系列<二> 模板类与友元函数
c/c++ 模板与STL小例子系列 模板类与友元函数 比如某个类是个模板类D,有个需求是需要重载D的operator<<函数,这时就需要用到友元. 实现这样的友元需要3个必要步骤 1,在模 ...
- 研磨JavaScript系列(一):回归简单
想要理解JavaScript,你得首先放下对象和类的概念,回到数据和代码的本原.编程世界只有数据和代码两种基本元素,而这两种元素又有着纠缠不清的关系.JavaScript就是把数据和代码都简化到最原始 ...
- DotNetty 实现 Modbus TCP 系列 (二) ModbusFunction 类图及继承举例
本文已收录至:开源 DotNetty 实现的 Modbus TCP/IP 协议 ModbusFunction 类图如下: 如前文所述,所有请求/相应的 PDU 均继承自 ModbusFunction, ...
- 研磨JavaScript系列(五):奇妙的对象
在JavaScript中,只有object和function两种东西有对象化的能力.我们先来说说函数的对象化能力. 任何一个函数都可以为其动态地添加或去除属性,这些属性可以是简单类型,可以是对象,也可 ...
- 研磨JavaScript系列(四):代码的时空
对于过程式编程来说,代码执行的时间与数据标识的空间是密不可分的.我们只有把指令执行的具体时刻与标识映射的具体地址结合起来,才能确定程序在执行瞬间的上下文状态.于是,代码时刻与数据标识的结构,就形成了作 ...
- 研磨JavaScript系列(三):函数的魔力
JavaScript的代码中就只有function一种形式,function就是函数的类型.在其他的编程语言中可能还存在Procedure或者是method等代码概念,在JavaScript中只有fu ...
- 面向对象的JavaScript系列二,继承
1.原型链 function SuperType(){ this.property = true; } SuperType.prototype.getSuperValue = function(){ ...
- Java多线程系列二——Thread类的方法
Thread实现Runnable接口并实现了大量实用的方法 public static native void yield(); 此方法释放CPU,但并不释放已获得的锁,其它就绪的线程将可能得到执行机 ...
随机推荐
- Sublime text如何设置快捷键让编写的HTML文件在浏览器预览?
STEP 1 Tools->Build System->New Build System STEP 2<img src="https://pic3.zhimg.com/ ...
- [BZOJ2843] 极地旅行社(LCT)
传送门 模板. ——代码 #include <cstdio> #include <iostream> #define N 300001 #define get(x) (son[ ...
- 转载 - PowerDesigner(CDM—PDM—SQL脚本的转换流程)
出处: http://jbeduhai.iteye.com/blog/338579 由于图片复制上去不显示,如想看内容及图片详情,请下载附件 PowerDesigner数据模型(CDM—PDM—SQL ...
- kendo grid 点击新增没有反映
在datasource中缺少 editable: "inline",这一行
- Javascript网址跳转方法
第一种: window.location.href="http://www.baidu.com"; 第二种: window.navigate("http://www.ba ...
- oracle 12c 初步操作
查看是否为cdb SQL> select name,cdb,open_mode,con_id from v$database; NAME CDB OPEN_MODE CON_ID ------- ...
- Solidworks如何另存为和打开OBJ文件
1 点击工具-插件,勾选ScanTo3D(最好后面的启动也勾选上,否则下次启动将不会默认自动启动这个插件,还需要再做一次才能打开或者另存为OBJ) 2 注意打开零件图的方式,你不能直接打开Soli ...
- Linux下使用Vi是方向键变乱码 退格键不能使用的解决方法
在Linux下编辑一些文件.这就涉及到了vi这个编辑器了.在Linux下,初始使用vi的时候有点问题.就是在编辑模式下使用方向键的时候,并不会使光标移动,而是在命令行中出现[A [B [C [D之类的 ...
- jQuery 中ready与load事件
jquey有3种针对文档加载的方法: //document ready $(document).ready(function(){ //...代码... }) //document ready 简写 ...
- EF TMD
TMD 几个月前,本着学习的心态,首次在项目中应用EF.因为这里老是赶.赶.赶,当时只是匆匆而就,浅尝辄止,搞到现在对EF一知半解,每次在新项目使用,都担惊受怕,大费周折,不知道什么时候,在什么地方就 ...