JS的面向对象编程

1.1   对象

  顾名思义,面向对象编程与对象有关。到目前为止,我们一直将对象当做值的无规律组合,在认为合适的时候添加和改变对象的属性。在面向对象的方法中,每个对象都是一个包含自身的小世界,外界只能通过有限明确的接口来接触对象,这些接口由一些具体的方法和属性组成。

之前见到的Date和Error对象的工作原理就是这样。它们用New关键字创建对象的方法,并提供多种方法和属性为其余的接口,而不是提供正规函数来使用这些对象。

1.1.1  定义方法

为对象添加方法的一种方式就是简单的附加一个函数值,如下面的代码所示。

var rabbit={};
rabbit.speak=function(line){
  print("The rabbit say  '"+line+"'");      
};

rabbit.speak("I am alive");

在大多数情况下,方法也需要明确调用自己的对象。例如,如果有多只兔子,speak方法要指出哪只兔子在说话。可以通过一个特殊的变量this来达到这个目的。当将函数作为方法调用(查找属性,然后立即调用,比如object.method() )时,this将指向相关的对象。

function speak(line) {
    print("The ", this.adjective, " rabbit say '", line, "'");
};

whiteRabbit = { adjective: "white", speak: speak };
fatRabbit = { adjective: "fat", speak: speak };

whiteRabbit.speak("Oh my ears and whiskers,how late it is getting!");
fatRabbit.speak("I could sure user a carrot right now.");

上面的代码使用this变量将正在说话的兔子的类型插入输出文本中。其将输出一下类容:

The white rabbit say Oh my ears and whiskers,how late it is getting!

The fat rabbit say I could sure user a carrot right now.

现在可以弄清apply方法的第一个神秘参数了,该参数指向调用该方法的对象,也可以通过以下方式让rabbit调用speak方法:

speak.apply(fatRabbit,["Yum."]);

函数也有一个与apply类似的call方法,但是可以为函数分别给出相应的参数,而无需将其作为一个数组。

speak.call(fatRabbit,"Burp.");

对于多个参数,可以按如下方式使用call和apply:

function run(from, to) {
    print("The ", this.adjective, "rabbit runs from ", from, " to ", to, ".");
};

run.apply(whiteRabbit, ["A", "B"]);
run.call(fatRabbit, "A", "B");

   1.1.2  构造函数

    new 关键字提供了一种简便的新对象创建方式。如果调用函数时在前面加new修饰符,其this变量将指向一个新对象,该对象会自动返回(除非使用return语句返回特定值)。以这种方式创建对象的函数称为构造函数。以下是创建兔子对象的构造函数。

 

posted @ 2013-05-20 09:37  彭满意  阅读(249)  评论(0编辑  收藏  举报