读书人

DOJO中的面向对象_第五章 Dojo/_base/

发布时间: 2012-10-13 11:38:17 作者: rapoo

DOJO中的面向对象__第五章 Dojo/_base/declare.js源码剖析(2)

接着第四章....

(二)?? getInherited和inherited方法

  这两个方法是对外提供的扩展接口,可以用declare出来的类型的实例调用。它们的用途是返回父类中曾经出现的方法,或者对其进行调用。具体的用法在第二章中已经描述,这里不再举例说明。

  1. getInherited方法主要用来返回父类中的方法;

  2. inherited方法主要用来调用父类中的方法;

  首先来看getInherited方法,该方法的实现比较简单:

  上面不仅贴出了整个inherited的实现,也标注了一些关键步骤的解释。其中的cache疑似是一个过期的实现,因为实在想不出会有什么情况下cache.c === caller,除非人为的故意设置成如此,不过幸好即使忽略掉cache的作用也不会影响整段代码的理解。还有一个颇为有趣的地方在于如果发现了一个方法处于chains之中,那么会抛出异常,因为对一个已经chains的方法再去手动调用是毫无意义的。

(三)? isInstanceOf方法

  在第二章中已经提及,为了弥补JS自带的instanceof运算符无法判断Dojo中的继承,所以才有了isInstanceOf扩展。该方法由Dojo中类型的实例来调用。

f = this.postscript;if(f){     f.apply(this, args);}

  这个实在没什么好讲的。

?

  从整个chainedConstructor的三大步骤实现来看,其实dojo的源码写的还是很通俗易懂的,结构也很清楚,是不错的学习材料^_^至此declare.js中比较重要的函数基本都已经讲完了,只缺少一个关于c3mro函数的剖析,但是前面讲mro已经花了大量的篇幅,便不打算再写下去了。以前都是仅仅停留在参阅Dojo的API的说明上,这是我第一次花力气去阅读Dojo的源码,可惜目前的工作中已经没有机会再使用Dojo了。

?

读书人网 >JavaScript

热点推荐