前面三篇讲的是同一种扩展方法,比照类库,我们可以称之为直接继承的扩展方法。本人推荐这种方法,简单,好理解。其实,名字空间库也有“间接继承”的扩展方法,也就是利用元表继承,在此展示一下,仅作为参考。在spaceB中这样写:
import test.spaceA;
namespace test.spaceB{
//直接写要扩展的内容
vB="spaceA扩展出来的成员变量";
funcB=function(){
..win.msgbox(vB,"spaceA扩展出来的成员函数");
}
}
//名字空间也是表,我们为它设置一个元表来实现继承
test.spaceB@={
_get=..test.spaceA;//spaceB没有的成员到spaceA中去找
}
测试一下,能够正常调用:
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add()
/*}}*/
import test.spaceB;//导入刚刚建立的新库
test.spaceB.funcA();//调用基库的函数
test.spaceB.funcB();//调用我们扩展出来的函数
winform.show();
win.loopMessage();
这时调用的owner也是统一的,是test.spaceB。但是占用了_get元方法,所以不太推荐。