因为一个研究型的小项目,需要用到javascript做一个图形展示,所以用到了jquery easyui+echarts,因为长久不做开发,而且以前的前端经验也不足,所以在写javascript时语法和特性都存在点问题,不过还是用到了adapter模式,用来将图形展示与数据处理分开,最终达到了最初设想的效果。下面就记录一下自己在写这些代码时遇到的坑。
1、对象的定义不能用类名,全用var,这是javascript的语法要求;
2、Dictionary类和Vector类可以自己定义,但是key值不能用对象,因为没有compare的方法,不知道是不是同一个对象,但是我也很奇怪,为什么javascript没有一个内置一些常用的数据结构,而需要自己单独定义。我也奇怪jquery难道也没有么,我总觉得应该有,只是我可能时间仓促没有找到,如果有小伙伴知道,请帮忙回复一个好用的,谢谢。
3、对于javascript类的继承,虽然网上查到有四种模式,但我个人还是建议用_initialized的方式,更偏向java的类定义语法。
if (typeof Vector._initialized == 'undefined') {
Vector.prototype.add = function(key) {
if (this.vector.haskey(key))
return;
else
this.vector.setkey(key, V);
};
Vector._initialized = true;}
类似上面的语法,但是发现如果采用带参数继承时,如果父类调用自己的一个prototype方法,那么初始化时系统不能正常调用到,引擎会报没有这个方法,所以我的感觉就是继承时,不要使用带参数的构造函数,可以用一些prototype的initial方法来实现。我的测试代码如下:
function A(s1, s2) {
var s = this.get();
//var s = "";
this.totalLength = s + s1.length + s2.length;
}
A.prototype.get = function(){
return 's';
};
function B(s1, s2) {
A.apply(this, arguments);
for (var m in A.prototype) {
if (!B.prototype[m]) { // 父类不能覆盖子类的方法
B.prototype[m] = A.prototype[m];
}
}
var s = this.get();
alert(s + this.totalLength);
}
4、利用jquery的ajax时,只能用http访问,直接本地访问时会报错。所以访问时要注意修改一下。