关于JavaScript 中的继承 -- 对象冒充
2007-09-15 16:07 黄明 阅读(295) 评论(0) 收藏 举报
今日网上闲逛,看淘宝UED 设计团队招聘,看了一下网上的面试题
复习了一下 JavaScript 中的一些基本概念
关于继承
JavaScript 中有多种继承方式
I. 对象冒充
主要原理:构造函数使用 this 关键字给所有属性和方法赋值(即采用类声明的构造函数方式)。
因为构造函数只是一个函数,SO 可使ClassA 的构造函数成为 ClassB 的方法,然后调用。ClassB 就会收到 ClassA 的构造函数中定义的属性和方法。
Example
注意:对象冒充可以支持多重继承。一个类可以继承多个超类。
Example
由于这种方法很流行,于是乎 ECMAScript 的第三版为 Function 对象加入了两个新方法, call() 和 apply()
今天就到这里,分几个小节吧
复习了一下 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 }
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 // 除了上述的问题,对象冒充实现多继承机制轻而易举。
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()
今天就到这里,分几个小节吧
浙公网安备 33010602011771号