首页 > PHP > 悟透JavaScript

悟透JavaScript

2009年06月30号
查看评论 发表评论 2,673次浏览

奇妙的对象

    先来说说函数的对象化能力。

    任何一个函数都可以为其动态地添加或去除属性,这些属性可以是简单类型,可以是对象,也可以是其他函数。也就是说,函数具有对象的全部特征,你完全可以把函数当对象来用。其实,函数就是对象,只不过比一般的对象多了一个括号“()”操作符,这个操作符用来执行函数的逻辑。即,函数本身还可以被调用,一般对象却不可以被调用,除此之外完全相同。请看下面的代码:

    function Sing()
    {
        
with(arguments.callee)
          alert(author 
+  + poem);
    };
    Sing.author 
= 李白;
    Sing.poem 
= 汉家秦地月,流影照明妃。一上玉关道,天涯去不归;
    Sing();
    Sing.author 
= 李战;
    Sing.poem 
= 日出汉家天,月落阴山前。女儿琵琶怨,已唱三千年;
    Sing();

    在这段代码中,Sing函数被定义后,又给Sing函数动态地增加了author和poem属性。将author和poem属性设为不同的作者和诗句,在调用Sing()时就能显示出不同的结果。这个示例用一种诗情画意的方式,让我们理解了JavaScript函数就是对象的本质,也感受到了JavaScript语言的优美。

    好了,以上的讲述,我们应该算理解了function类型的东西都是和object类型一样的东西,这种东西被我们称为“对象”。我们的确可以这样去看待这些“对象”,因为它们既有“属性”也有“方法”嘛。但下面的代码又会让我们产生新的疑惑:

    var anObject = {};  //一个对象
    anObject.aProperty = Property of object;  //对象的一个属性
    anObject.aMethod = function(){alert(Method of object)}; //对象的一个方法
    //主要看下面:
    alert(anObject["aProperty"]);   //可以将对象当数组以属性名作为下标来访问属性
    anObject["aMethod"]();          //可以将对象当数组以方法名作为下标来调用方法
    forvar s in anObject)           //遍历对象的所有属性和方法进行迭代化处理
        alert(s +  is a  + typeof(anObject[s]));

    同样对于function类型的对象也是一样:

    var aFunction = function() {};  //一个函数
    aFunction.aProperty = Property of function;  //函数的一个属性
    aFunction.aMethod = function(){alert(Method of function)}; //函数的一个方法
    //主要看下面:
    alert(aFunction["aProperty"]);   //可以将函数当数组以属性名作为下标来访问属性
    aFunction["aMethod"]();          //可以将函数当数组以方法名作为下标来调用方法
    forvar s in aFunction)           //遍历函数的所有属性和方法进行迭代化处理
        alert(s +  is a  + typeof(aFunction[s]));

    是的,对象和函数可以象数组一样,用属性名或方法名作为下标来访问并处理。那么,它到底应该算是数组呢,还是算对象?

    我们知道,数组应该算是线性数据结构,线性数据结构一般有一定的规律,适合进行统一的批量迭代操作等,有点像波。而对象是离散数据结构,适合描述分散的和个性化的东西,有点像粒子。因此,我们也可以这样问:JavaScript里的对象到底是波还是粒子?

    如果存在对象量子论,那么答案一定是:波粒二象性!

    因此,JavaScript里的函数和对象既有对象的特征也有数组的特征。这里的数组被称为“字典”,一种可以任意伸缩的名称值对儿的集合。其实, object和function的内部实现就是一个字典结构,但这种字典结构却通过严谨而精巧的语法表现出了丰富的外观。正如量子力学在一些地方用粒子来解释和处理问题,而在另一些地方却用波来解释和处理问题。你也可以在需要的时候,自由选择用对象还是数组来解释和处理问题。只要善于把握JavaScript的这些奇妙特性,就可以编写出很多简洁而强大的代码来。

页面: 1 2 3 4 5 6 7 8 9 10

类别PHP 标签
  1. cheap Bikinis
    发表于 2010年06月15号 05时13分37秒 | 1楼

    I agree with most of this article

  2. Hermes Handbags
    发表于 2010年06月20号 06时41分45秒 | 2楼

    The FUN comes the FIRST… :D

  3. kobe shoes
    发表于 2010年06月25号 05时50分09秒 | 3楼

    Thank you for every word that you wrote..every one of them touches my heart…

  4. ghd hair straighteners
    发表于 2010年06月28号 05时57分32秒 | 4楼

    Wow, this blog really caught my eye!

  5. nike airforce
    发表于 2010年06月28号 08时41分24秒 | 5楼

    Good point on the concience

  6. herve leger dress
    发表于 2010年06月29号 00时17分34秒 | 6楼

    I am especially impressed with your post.

  7. mbt shoes clearance
    发表于 2010年07月08号 04时04分09秒 | 7楼

    I complitely agree with you..Thank you for bringing it up!

  8. lacoste t-shirts
    发表于 2010年07月09号 14时28分51秒 | 8楼

    wow powerful!

  9. bmw watch
    发表于 2010年07月09号 17时39分41秒 | 9楼

    Ooh!! I must remember this one!!

  10. lacoste polo shirts
    发表于 2010年07月09号 17时43分41秒 | 10楼

    That’s a good question.

  11. puma sneakers
    发表于 2010年07月09号 17时52分31秒 | 11楼

    I was thinking today that being grateful every moment is great freedom.

  12. Gucci Designer Handbags
    发表于 2010年07月19号 19时24分11秒 | 12楼

    Great, Good Luck!

  13. LeBron James Shoes
    发表于 2010年07月20号 10时39分03秒 | 13楼

    they are … powerful

  14. MBT Shoes Clearance
    发表于 2010年07月21号 11时53分13秒 | 14楼

    thank you for agreeing to share a precious moment of your life.

  15. air jordan 2009
    发表于 2010年07月22号 13时51分18秒 | 15楼

    It is fascinating to me how this article about.

评论页数:
1 2 258
你必需 登陆 才能发表评论.