在JavaScript面向对象编程中使用继承(4)

简介:
  大家好像对JavaSript面向对象编程的继承不是很感兴趣哦 ,都没有什么讨论。也许是大家暂时都遇不到如此复杂的脚本开发solution,不过以后有问题也欢迎来讨论哦。毕竟经典的教程是不可能包括这些高级应用的,所以我总结的东西也就可能还有谬误。

    今天说说脚本面向对象编程中的'实例继承法',这个方法是 经典论坛中,介绍JScript面向对象编程的文章中使用的继承方法。它是怎么工作的呢?

    实例继承法的原理:

    实例继承法的关键代码是其构造函数 function ArrayList03()中的:
  var base =  new CollectionBase();
  //  ...
  return base;

    其实就是在子类构造时创建基类的一个实例,然后把基类实例作为返回值实返回。这时的所谓继承操作都是对Object实例(基类也就是一个Object的派生类的实例)的动态读写,为其添加属性和方法等,根本没有涉及任何与继承相关的范畴,不过最终的效果上还是让人觉的是实现了继承。

    实例继承法的缺陷:

    这种继承法看起来还是比较清楚的,特别是如果你已理解了JavaScript对象的动态特性。不过这种方法最大的缺陷也是来至于对类代码的书写的要求上,由于我们在子类构造函数中创建了基类实例,所以对基类的书写时没有任何的要求,只要是一个脚本引擎认为正确的类就可以了。不过子类就不能随便写了,由于子类的属性和方法通过对象的动态特性来实现,所以子类也不能使用原型属性(prototype)来实现属性和方法的导入,而必须用inline的方式写在子类的构造函数里,这个和 构造法实现继承的限制很相似,不过前者是限制基类的书写不能使用prototype属性。

    实例继承法的示例:
 document.write('实例继承法:<br>'); 
  var arrayList31 =  new ArrayList03();
 arrayList31.Add('a');
 arrayList31.Add('b');
 arrayList31.foo();
  var arrayList32 =  new ArrayList03();
 arrayList32.Add('a');
 arrayList32.Add('b');
 arrayList32.Add('c');
 arrayList32.foo();

    示例运行结果:
 实例继承法:
 [class ArrayList03]: 2: a,b
 [class ArrayList03]: 3: a,b,c

    小结:实例继承法其实有些偷梁换柱的味道,因为这样得到的实例,针对instanceOf来说的话,完全是其基类的一个扩展。而子类的实例是被扔掉了的,因为 new ArrayList03()返回的是基类实例( return base;)。这完全没有了任何继承的味道,叫做类扩展还贴切些 。优点是对基类的编写没有任何特殊要求,不过同样需要规定子类的写法,子类不能使用prototype来导入原型方法,并且在子类构造函数中创建基类实例 var base =  new CollectionBase();需要在构造函数开头(即任何向base添加属性和方法之前)。

    应用场景:没有太经典的应用场景,不过对于基类比较复杂,而子类需要添加的属性方法很少的继承,实例法还是显得挺清晰的。特别是对于JScript对象动态扩展很熟悉的人,就更觉得明确了。


本文转自博客园鸟食轩的博客,原文链接:http://www.cnblogs.com/birdshome/,如需转载请自行联系原博主。

目录
相关文章
|
11天前
|
JavaScript 前端开发
如何在 JavaScript 中使用 __proto__ 实现对象的继承?
使用`__proto__`实现对象继承时需要注意原型链的完整性和属性方法的正确继承,避免出现意外的行为和错误。同时,在现代JavaScript中,也可以使用`class`和`extends`关键字来实现更简洁和直观的继承语法,但理解基于`__proto__`的继承方式对于深入理解JavaScript的面向对象编程和原型链机制仍然具有重要意义。
|
20天前
|
JavaScript 前端开发
Javascript如何实现继承?
【10月更文挑战第24天】JavaScript 中实现继承的方式有很多种,每种方式都有其优缺点和适用场景。在实际开发中,我们需要根据具体的需求和情况选择合适的继承方式,以实现代码的复用和扩展。
|
14天前
|
JavaScript 前端开发
如何使用原型链继承实现 JavaScript 继承?
【10月更文挑战第22天】使用原型链继承可以实现JavaScript中的继承关系,但需要注意其共享性、查找效率以及参数传递等问题,根据具体的应用场景合理地选择和使用继承方式,以满足代码的复用性和可维护性要求。
|
14天前
|
JavaScript 前端开发 开发者
js实现继承怎么实现
【10月更文挑战第26天】每种方式都有其优缺点和适用场景,开发者可以根据具体的需求和项目情况选择合适的继承方式来实现代码的复用和扩展。
29 1
|
2月前
|
自然语言处理 JavaScript 前端开发
一文梳理JavaScript中常见的七大继承方案
该文章系统地概述了JavaScript中七种常见的继承模式,包括原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合继承等,并探讨了每种模式的实现方式及其优缺点。
一文梳理JavaScript中常见的七大继承方案
|
1月前
|
JavaScript 前端开发 Java
JavaScript中的面向对象编程(OOP) - 终极指南
本文介绍了 JavaScript 的面向对象编程 (OOP) 概念,包括继承、多态、封装和抽象等关键要素,并通过代码示例帮助开发者理解和应用 OOP 思维。
37 5
|
2月前
|
JavaScript 前端开发
js之class继承|27
js之class继承|27
|
2月前
|
JavaScript 前端开发 Java
js面向对象编程|24
js面向对象编程|24
|
2月前
|
JSON JavaScript 前端开发
js原型继承|26
js原型继承|26
|
2月前
|
JavaScript 前端开发 开发者
JavaScript 类继承
JavaScript 类继承
19 1