验证javascript中Object和Function的关系的三段简单代码


Posted in Javascript onJune 27, 2010

话说在楼猪理解和实践能力尚欠火候的时候,在这篇里曾经照搬了李战老师不少东西写在自己的博客里作为“知识储备”。这一次还是不能免俗。在翻到第5章的时候,被开篇第二段话深深吸引和折服:“函数具有对象的全部特征,你完全可以把函数当对象调用。其实,函数就是对象,只不过比一般的对象多了一个括号“{}”操作符,这个操作符用来执行函数的逻辑,即函数本身还可以被调用,一般对象却不可以被调用,除此之外完全相同”。寥寥数语,却深刻阐释了对象和函数的关系。下面楼猪就通过自己写的几段简单代码,论证一下javascript内置Object和Function的关系。


1、Function就是Object,Object就是Function

alert(Function instanceof Object); // true 
alert(Object instanceof Function); // true

如你所看到的那样,通过instanceof操作符,函数就是对象,对象就是函数。
2、既然1是成立的,那么Function扩展的原型方法,Object能“得到”吗?
alert(Object.funcMethod); // undefined 
Function.prototype.funcMethod = function() { 
/*some function method code here*/ 
} 
alert(Function.funcMethod); 
alert(Object.funcMethod); 
alert(Function.funcMethod === Object.funcMethod); //true

你没有看错,我们为Function扩展的原型方法funcMethod,Object实现了神奇的“不劳而获”。
3、既然1和2都成立,那么Object扩展的原型方法,Function能“得到”吗?!
代码
alert(Function.objMethod); // undefined 
Object.prototype.objMethod = function() { 
/*some object method code here*/ 
} 
alert(Object.objMethod); 
alert(Function.objMethod); 
alert(Function.objMethod === Object.objMethod); //true or false?

上面代码中最后有个问号的那一行是弹出true还是false呢?卖个关子,根据楼猪通篇直白而单纯的表述,你应该已经知道结果了,这里不公布答案了。

最后,容楼猪在这里得意地自恋一下:个人认为上面这三段代码应该比原书中验证“函数就是对象的本质”的代码更具有说服力。

Javascript 相关文章推荐
通过复制Table生成word和excel的javascript代码
Jan 20 Javascript
Javascript基础教程之数据类型 (布尔型 Boolean)
Jan 18 Javascript
ztree获取当前选中节点子节点id集合的方法
Feb 12 Javascript
JavaScript清空数组元素的两种方法简单比较
Jul 10 Javascript
js实现图片放大和拖拽特效代码分享
Sep 05 Javascript
浅谈javascript中new操作符的原理
Jun 07 Javascript
深入理解JavaScript定时机制
Oct 27 Javascript
利用10行js代码实现上下滚动公告效果
Dec 08 Javascript
浅谈VUE单页应用首屏加载速度优化方案
Aug 28 Javascript
原生JS实现列表内容自动向上滚动效果
May 22 Javascript
Vue 简单实现前端权限控制的示例
Dec 25 Vue.js
Vue vee-validate插件的简单使用
Jun 22 Vue.js
jQuery选择头像并实时显示的代码
Jun 27 #Javascript
Javascript匿名函数的一种应用 代码封装
Jun 27 #Javascript
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
Jun 25 #Javascript
让IE6支持min-width和max-width的方法
Jun 25 #Javascript
jQuery与其它库冲突的解决方法
Jun 25 #Javascript
jQuery.Validate 使用笔记(jQuery Validation范例 )
Jun 25 #Javascript
基于jquery的checkbox下拉框插件代码
Jun 25 #Javascript
You might like
php中取得文件的后缀名?
2012/02/20 PHP
PHP关联链接常用代码
2012/11/05 PHP
PHP基于curl后台远程登录正方教务系统的方法
2016/10/14 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
PHP简单实现二维数组的矩阵转置操作示例
2017/11/24 PHP
一个可以显示阴历的JS代码
2007/03/05 Javascript
Code: write(s,d) 输出连续字符串
2007/08/19 Javascript
JavaScript 继承的实现
2009/07/09 Javascript
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
javascript时间函数大全
2014/06/30 Javascript
javascript控制图片播放的实现代码
2020/07/29 Javascript
js带缩略图的图片轮播效果代码分享
2015/09/14 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
用window.onerror捕获并上报Js错误的方法
2016/01/27 Javascript
jQuery通过写入cookie实现更换网页背景的方法
2016/04/15 Javascript
js实现简单的二级联动效果
2017/03/09 Javascript
Vue中使用Sortable的示例代码
2018/04/07 Javascript
Vue 莹石摄像头直播视频实例代码
2018/08/31 Javascript
解决vue keep-alive 数据更新的问题
2018/09/21 Javascript
微信小程序登录态和检验注册过没的app.js写法
2019/05/22 Javascript
学前端,css与javascript重难点浅析
2020/06/11 Javascript
Js利用正则表达式去除字符串的中括号
2020/11/23 Javascript
[02:17]2016国际邀请赛中国区预选赛VG战队领队采访
2016/06/26 DOTA
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
2019/01/26 Python
Python生态圈图像格式转换问题(推荐)
2019/12/02 Python
python 在threading中如何处理主进程和子线程的关系
2020/04/25 Python
PyCharm中如何直接使用Anaconda已安装的库
2020/05/28 Python
python/golang 删除链表中的元素
2020/09/14 Python
Python LMDB库的使用示例
2021/02/14 Python
HTML5移动开发图片压缩上传功能
2016/11/09 HTML / CSS
小学学校评估方案
2014/06/08 职场文书
党员评议自我评价
2015/03/03 职场文书
Vue OpenLayer测距功能的实现
2022/04/20 Vue.js
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
2022/08/05 Vue.js