日期:2014-05-16  浏览次数:20409 次

ExtJs中继承的实现与理解—extend

转自http://linder0209.iteye.com/blog/876386

?

Ext中实现类的继承

Js代码 ?收藏代码
  1. extend?(Object?subclass,Object?superclass,[Object?overrides]?:?Object)??

?
第一个参数:子类
第二个参数:父类
第三个参数:要覆盖的属性。
这里需要强调一下,子类继承下来的是父类中通过superclass.prototype方式定义的属性(包括用此方法定义的函数),而不继承superclass中的定义的属性和方法,如果子类中的方法名与父类中相同则会覆盖。例子

??? 父类

Js代码 ?收藏代码
  1. BaseClass?=? function ()?{??
  2. ?f1?=?function ()?{??
  3. ??alert("f1?in?base" );??
  4. ?},??
  5. ?f2?=?function ()?{??
  6. ??alert("f2?in?base" );??
  7. ?}??
  8. }??
  9. BaseClass.prototype?=?{??
  10. ?f3?:?function ()?{??
  11. ??alert("f3?in?base" );??
  12. ?},??
  13. ?f4?:?function ()?{??
  14. ??alert("f4?in?base" );??
  15. ?}??
  16. };??

?
??? 子类

Js代码 ?收藏代码
  1. ChildClass?=? function ()?{??
  2. }??
  3. //?继承 ??
  4. Ext.extend(ChildClass,?BaseClass,?{??
  5. ???f1?:?function ()?{??
  6. ????alert("f1?in?child" );??
  7. ???},??
  8. ???f3?:?function ()?{??
  9. ????alert("f3?in?child" );??
  10. ???}??
  11. ??});??

?
??? 实例化

Js代码 ?收藏代码
  1. var ?b?=? new ?ChildClass();??
  2. b.f1();//?调用子类中的实现 ??
  3. //b.f2();//?会报错,因为子类中没有该方法,并且父类中定义的f2是内部变量,作用域只有在内部可见(闭包) ??
  4. b.f3();//?继承并覆盖,调用子类的中的实现 ??
  5. b.f4();//?继承,调用父类的中的实现 ??

?

???? 补充:通过对 JavaScript 的原型继承的了解,可以知道,实例变量的优先级是高于 prototype 的,参见我之前写的文章javascript中静态方法、实例方法、内部方法和原型的一点见解 又如以下例子:
??? 父类

Js代码 ?收藏代码
  1. BaseClass?=?