研磨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系列之变量对象 引言 一般在编程的时候,我们会定义函数和变量来成功的构造我们的系统.但是解析器该如何找到这些数据(函数,变量)呢?当我们引用需要的对象时,又发生了什么了? 很 ...
随机推荐
- slf4j+log4j2的配置
昨天自己测试了一下slf4j+log4j2的配置,可以正常使用,虽然配置十分简单,但好记性不如烂笔头,想想还是记录下来吧. 运行的环境:jdk1.7.tomcat7.Maven的web项目 1.在新建 ...
- 【Codeforces 923A】Primal Sport
[链接] 我是链接,点我呀:) [题意] 题意 [题解] 考虑怎么得到数字x2=N,假设是质数p的倍数 那么x1肯定在x2-p+1~x2这个范围内才行 因为p的倍数要刚好大于等于x1, 所以x1肯定是 ...
- 由MTK平台 mtkfb 设备注册疑问引发的知识延伸--ARM Device Tree
问题: 在kernel-3.10\drivers\misc\mediatek\videox\mt6735\mtkfb.c里面int __init mtkfb_init(void) 有看到 platfo ...
- spring-quartz定时器简单用法
基本配置: 1.quartz.properties #============================================================== #Configure ...
- VNC Viewer 设置屏幕分辨率-解决屏幕分辨率问题
https://blog.csdn.net/runningtortoises/article/details/51425332
- 洛谷—— P1825 [USACO11OPEN]玉米田迷宫Corn Maze
https://www.luogu.org/problem/show?pid=1825 题目描述 This past fall, Farmer John took the cows to visit ...
- POJ——1061 青蛙的约会
青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 117858 Accepted: 24599 Descript ...
- Ubuntu 16.04下使用gcc输出汇编的.0文件为可执行文件时出现:`_start'被多次定义
错误如下: `_start'被多次定义 /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o:(.text+0x0):第一次 ...
- SQL 2012中文乱码
MS SQL插入汉字的时候.常常会遇到部分汉字变成了乱码问号了, 所以在安装数据库或者在创建表的时候须要注意一下几点: 1.保存汉字的字段要用NVARCHAR.NCHAR.NTEXT等.插入的时候要用 ...
- nginx源代码分析--框架设计 & master-worker进程模型
Nginx的框架设计-进程模型 在这之前,我们首先澄清几点事实: nginx作为一个高性能server的特点.事实上这也是全部的高性能server的特点,依赖epoll系统调用的高效(高效是相对sel ...