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

 更新时间:2010年06月27日 02:35:29   作者:  
今天重温经典书籍。这一次看的是博客园李战老师写的<<悟透JavaScript>>,也是被楼猪翻看最多的技术书籍之一。
话说在楼猪理解和实践能力尚欠火候的时候,在这篇里曾经照搬了李战老师不少东西写在自己的博客里作为“知识储备”。这一次还是不能免俗。在翻到第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呢?卖个关子,根据楼猪通篇直白而单纯的表述,你应该已经知道结果了,这里不公布答案了。
  最后,容楼猪在这里得意地自恋一下:个人认为上面这三段代码应该比原书中验证“函数就是对象的本质”的代码更具有说服力。

相关文章

  • 浅谈js中同名函数和同名变量的执行问题

    浅谈js中同名函数和同名变量的执行问题

    下面小编就为大家带来一篇浅谈js中同名函数和同名变量的执行问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • 关于Stream和Buffer的相互转换详解

    关于Stream和Buffer的相互转换详解

    这篇文章主要给大家介绍了关于Stream和Buffer相互转换的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧。
    2017-07-07
  • JS+CSS实现炫酷光感效果

    JS+CSS实现炫酷光感效果

    这篇文章主要为大家详细介绍了JS+CSS实现炫酷光感效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • 详解JS事件循环及宏任务微任务的原理

    详解JS事件循环及宏任务微任务的原理

    在js中,我们一般将所有的任务都分成两类,一种是同步任务,另外一种是异步任务。而在异步任务中,又有着更加细致的分类,那就是微任务和宏任务。本文将详细讲解这二者的原理与使用,需要的可以参考一下
    2022-05-05
  • sencha touch 模仿tabpanel导航栏TabBar的实例代码

    sencha touch 模仿tabpanel导航栏TabBar的实例代码

    这篇文章介绍了sencha touch 模仿tabpanel导航栏TabBar的实例代码,有需要的朋友可以参考一下
    2013-10-10
  • JS浏览器导航栏navigator的一些冷知识

    JS浏览器导航栏navigator的一些冷知识

    这篇文章主要为大家介绍了JS导航栏navigator的一些冷知识使用方法实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • javascript前端和后台进行数据交互方法示例

    javascript前端和后台进行数据交互方法示例

    这篇文章主要介绍了javascript前端和后台进行数据交互方法示例,文章通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • JavaScript中window和document用法详解

    JavaScript中window和document用法详解

    这篇文章主要介绍了JavaScript中window和document用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 一个精简的JS DIV层tab切换代码

    一个精简的JS DIV层tab切换代码

    下面的代码是比较精简的js tab切换代码,原理也比较简单。
    2010-03-03
  • 仅30行代码实现Javascript中的MVC

    仅30行代码实现Javascript中的MVC

    这篇文章主要介绍了仅30行代码实现Javascript中的MVC的方法,MVC的基础是观察者模式,这是实现model和view同步的关键,想要深入了解的朋友可以参考本文
    2016-02-02

最新评论