研磨JavaScript系列(五):奇妙的对象
在JavaScript中,只有object和function两种东西有对象化的能力。我们先来说说函数的对象化能力。
任何一个函数都可以为其动态地添加或去除属性,这些属性可以是简单类型,可以是对象,也可使其他的函数。也就是说,函数具有对象的全部特征,完全可以把函数当对象来用。其实,函数就是对象,只不过比一般的对象多了一个括号"()"操作符,这个操作符用来执行函数的逻辑,即函数本身还可以被调用,一般对象不可以被调用。除此之外,完全相同。
<script type="text/javascript">
function sing(){
alert(sing.author + "正唱着" + sing.song);
} sing.author = "张信哲";
sing.song = "爱如潮水";
sing(); //输出张信哲正唱着爱如潮水 sing.author = "林志炫";
sing.song = "蒙娜丽莎的眼泪";
sing(); //输出林志炫正唱着蒙娜丽莎的眼泪
</script>
在这段代码中,sing函数被定义后,又给sing函数动态的增加了author和song属性。将author和song属性设为不同的演唱者和歌曲,在调用sing()时,就能显示出不同的结果。这个示例让我们理解了JavaScript函数就是对象的本质,也感受到了JavaScript语言的优美。
我们应该是理解了function类型的东西都是和object类型一样的东西,这种东西被我们称为对象。我们的确可以这样去看待这些对象,因为它们既有属性,也有方法。
我们看下面的代码,可能会让我们产生新的疑惑。
<script type="text/javascript">
var anObject = {};
anObject.aProperty = "Property of object"; //对象的一个属性
anObject.aMethod = function(){ alert("Method of object"); }; //对象的一个方法 alert(anObject["aProperty"]); //可以将对象当数值以属性名作为下标来访问属性
alert(anObject["aMethod"]); //可以将对象当数组以方法名作为下标来访问方法 //遍历对象所有属性和方法进行迭代处理
for (var s in anObject){
alert(s + " is a " + typeof(anObject[s]));
}
</script>
对于function类型的对象也一样
<script type="text/javascript">
var aFunction = function(){}; //一个函数
aFunction.aProperty = "Property of object"; //函数的一个属性
aFunction.aMethod = function(){ alert("Method of object"); }; //函数的一个方法 alert(aFunction["aProperty"]); //可以将函数当数组以属性名作为下标来访问属性
alert(aFunction["aMethod"]); //可以将函数当数组以方法名作为下标来访问方法 //遍历函数所有属性和方法进行迭代处理
for (var s in aFunction){
alert(s + " is a " + typeof(aFunction[s]));
}
</script>
是的,对象和函数可以入数组一样,用属性名或方法名作为下标来访问并处理。
文章声明:本文部分内容参考自《悟透JavaScript》,这是一本学习JavaScript非常好的书。
研磨JavaScript系列(五):奇妙的对象的更多相关文章
- 研磨JavaScript系列
JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言.同时也是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种操作.它最初由网景公司 ...
- 研磨JavaScript系列(四):代码的时空
对于过程式编程来说,代码执行的时间与数据标识的空间是密不可分的.我们只有把指令执行的具体时刻与标识映射的具体地址结合起来,才能确定程序在执行瞬间的上下文状态.于是,代码时刻与数据标识的结构,就形成了作 ...
- JavaScript系列----一切皆是对象
1.判断对象类型 1.1.typeof 运算符 首先要认识到,typepof是一个运算符,其运算需要一个参数,返回值是参数的类型. typeof使用方法 typeof parameter //使用方法 ...
- 研磨JavaScript系列(一):回归简单
想要理解JavaScript,你得首先放下对象和类的概念,回到数据和代码的本原.编程世界只有数据和代码两种基本元素,而这两种元素又有着纠缠不清的关系.JavaScript就是把数据和代码都简化到最原始 ...
- 研磨JavaScript系列(二):没有类
object就是对象的类型.在JavaScript中不管多么复杂的数据和代码.都可以组织成object形式的对象. 但JavaScript没有"类"概念. 看下面这段JavaScr ...
- 研磨JavaScript系列(三):函数的魔力
JavaScript的代码中就只有function一种形式,function就是函数的类型.在其他的编程语言中可能还存在Procedure或者是method等代码概念,在JavaScript中只有fu ...
- JavaScript 系列博客(五)
JavaScript 系列博客(五) 前言 本篇博客学习 js 选择器来控制 css 和 html.使用事件(钩子函数)来处理事件完成后完成指定功能以及js 事件控制页面内容. js 选择器 在学习 ...
- JavaScript 系列--JavaScript一些奇淫技巧的实现方法(二)数字格式化 1234567890转1,234,567,890;argruments 对象(类数组)转换成数组
一.前言 之前写了一篇文章:JavaScript 系列--JavaScript一些奇淫技巧的实现方法(一)简短的sleep函数,获取时间戳 https://www.mwcxs.top/page/746 ...
- javascript系列之变量对象
原文:javascript系列之变量对象 引言 一般在编程的时候,我们会定义函数和变量来成功的构造我们的系统.但是解析器该如何找到这些数据(函数,变量)呢?当我们引用需要的对象时,又发生了什么了? 很 ...
随机推荐
- HDU 4451 容斥原理
题目大意: n件衣服,m条裤子,k双鞋子进行搭配 妈妈指明了哪些衣服和裤子不能搭配,哪些裤子和鞋子不能搭配,问最后有几种搭配方法 先假设都能搭配 n*m*k 每次遇到衣服和裤子不能搭的,就要减一次k, ...
- CTF常用在线工具总结
在线工具 MD5加密 MD5解密(推荐) MD5解密(推荐) MD5解密 escap加解密 维吉尼亚密码 SHA 对称加密AES DES\3DES RC4\Rabbit Quoted-print ...
- Javaweb中文乱码问题
request.setCharacterEncoding("utf-8");必须写在获得参数之前,即request.getParameter();之前
- codevs1004 四子连棋
题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋子,7颗黑色棋子,有两个空白地带,任何一颗黑白棋子都可以向上下左右四个方向移动到相邻的空格,这叫行棋一步,黑白双 ...
- 自己修改的vim配色选择器的颜色显示部分
话不多说,上代码如下: " ___ __) ) ___ ______) " (, |/ (__/_____) /) (, / /) /) " | _/_ _ __ ___ ...
- [bzoj3668][Noi2014]起床困难综合症_暴力
起床困难综合征 bzoj-3668 Noi-2014 题目大意:题目链接. 注释:略. 想法:Noi考这题...联赛T1难度.... 我们将每个门上的数二进制拆分. 发现:当前位的操作可能直接确定了当 ...
- log4j2.xml 的配置 及使用
log4j2.xml配置 <?xml version="1.0" encoding="UTF-8"?> <Configuration > ...
- MySQL出现:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure Last packet sent to the server was 0 ms ago.
1.首先检查生产环境的机器是否ping的通和telnet的通数据库 2.排查数据库连接的参数 3.看数据量是否很大 参考: http://blog.csdn.net/sclxf/article/det ...
- Luca Canali
https://github.com/LucaCanali http://cern.ch/canali/
- qt自己定义搜索框(超简单,带效果图)
1. 什么也不要说.先上效果图: 2. 代码 头文件: #ifndef APPSEARCHLINE_H #define APPSEARCHLINE_H #include <QLineEdit&g ...