点击这里给我发消息 点击这里给我发消息

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

添加时间:2011-6-25
    相关阅读: 技术 JavaScript

今天重温经典书籍。这一次看的是博客园李战老师写的<<悟透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呢?卖个关子,根据楼猪通篇直白而单纯的表述,你应该已经知道结果了,这里不公布答案了。

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

本文作者:未知
咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册