写js类,依赖的管理是一个比较麻烦的事情,如果a.js依赖b.js,而b.js又使用了c.js的代码,那么我们在客户程序中必须把a.js,b.js,c.js统统用script标签导入。如果c.js发生更改,又实用了d.js,那么所有包含a.js,b.js,c.js的页面统统需要修改。
而在java中,我们import一个a.java,不过a.java的依赖项发生怎么样的更改,客户程序只要import a.java就可以了。
根据这个需求,写了个小工具,可以动态加载js。
在TestA.js中定义一个类
Java代码
var TestA = $createClass('TestA',function(param){
this.value = param;
this.name = "testA";
});
TestA.prototype.test = function(){
alert(this.name+":" + this.value);
}
在TestB.js中写一个类TestB.js继承TestA
Java代码
$import('TestA'); //导入TestA
var TestB = $createClass('TestB',function(param){ //继承TestA
this.TestA(param); //运行父类的构造函数
this.name = "testB";
},'TestA');
然后在TestC.js中写一个类继承TestB
Java代码
$import('TestB');//只要导入TestB就可以了,不需要导入TestA
var TestC = $createClass('TestC',function(param){ //继承TestB
this.TestB(param); //运行父类的构造函数
this.name = "testC";
},'TestB');
html文件中的代码:
Java代码
<body>
<script>
$import('TestC');//只要导入TestC,TestB和TestA系统会导入。
$ready(function(){
var obj = new TestC('test');
obj.test();
});
</script>
</body>
系统就会打印出:
testC:test
这个工具的难点是js的加载是完全异步的,当testC被加载后,他的父类TestB和TestA实际不存在,系统会让他继承一个空白类,当TestB和TestA加载进来后,系统会检查他们有哪些子类,然后把父类的函数和属性赋值给子类。用这种方法也可以动态加载普通的js库,比如jquery,你可以写个$import('jquery'),当然,jquery的类是不能被你继承的。
代码见附件
而在java中,我们import一个a.java,不过a.java的依赖项发生怎么样的更改,客户程序只要import a.java就可以了。
根据这个需求,写了个小工具,可以动态加载js。
在TestA.js中定义一个类
Java代码
var TestA = $createClass('TestA',function(param){
this.value = param;
this.name = "testA";
});
TestA.prototype.test = function(){
alert(this.name+":" + this.value);
}
在TestB.js中写一个类TestB.js继承TestA
Java代码
$import('TestA'); //导入TestA
var TestB = $createClass('TestB',function(param){ //继承TestA
this.TestA(param); //运行父类的构造函数
this.name = "testB";
},'TestA');
然后在TestC.js中写一个类继承TestB
Java代码
$import('TestB');//只要导入TestB就可以了,不需要导入TestA
var TestC = $createClass('TestC',function(param){ //继承TestB
this.TestB(param); //运行父类的构造函数
this.name = "testC";
},'TestB');
html文件中的代码:
Java代码
<body>
<script>
$import('TestC');//只要导入TestC,TestB和TestA系统会导入。
$ready(function(){
var obj = new TestC('test');
obj.test();
});
</script>
</body>
系统就会打印出:
testC:test
这个工具的难点是js的加载是完全异步的,当testC被加载后,他的父类TestB和TestA实际不存在,系统会让他继承一个空白类,当TestB和TestA加载进来后,系统会检查他们有哪些子类,然后把父类的函数和属性赋值给子类。用这种方法也可以动态加载普通的js库,比如jquery,你可以写个$import('jquery'),当然,jquery的类是不能被你继承的。
代码见附件