NET, ASP.NET, AJAX, ASP.NET AJAX, JavaScript, WEB, WEB2.0, Neoking, Neoayi, Microsoft, SilverLight, CSS
代码改变世界

关于JavaScript 中的继承 -- 对象冒充

2007-09-15 16:07  黄明  阅读(295)  评论(0)    收藏  举报
今日网上闲逛,看淘宝UED 设计团队招聘,看了一下网上的面试题
复习了一下 JavaScript 中的一些基本概念

关于继承
JavaScript 中有多种继承方式
I. 对象冒充
    主要原理:构造函数使用 this 关键字给所有属性和方法赋值(即采用类声明的构造函数方式)。
    因为构造函数只是一个函数,SO 可使ClassA 的构造函数成为 ClassB 的方法,然后调用。ClassB 就会收到 ClassA 的构造函数中定义的属性和方法。

Example
 1     function classA(sColor){
 2         this.color = sColor;
 3         this.sayColor = function(){
 4             alert(this.color);
 5         }
 6     }
 7 
 8     function classB(sColor,sName){
 9     }
10 
11     function classB(sColor){
12        this.newMethod = classA;
13        this.newMethod(sColor);
14        delete this.newMethod;
15 
16     // 所有的新属性和新方法必须在删除了新方法的代码行后定义。
17     // 否则可能会覆盖超类的相关属性和方法。
18     this.name = sName;
19     this.sayName = function(){
20        alert(this.name);
21         }
22     }

    注意:对象冒充可以支持多重继承。一个类可以继承多个超类。
Example
   
 1 function classZ(){
 2     this.newMethod = classX;
 3     this.newMethod();
 4     delete this.newMethod;
 5 
 6     this.newMethod = classY;
 7     this.newMethod();
 8     delete this.newMethod;
 9 }
10 // 弊病 当classX 和 classY 具有同名属性或方法时,后继承类具有高优先权。
11 // 除了上述的问题,对象冒充实现多继承机制轻而易举。

由于这种方法很流行,于是乎 ECMAScript 的第三版为 Function 对象加入了两个新方法, call() 和 apply()
今天就到这里,分几个小节吧