因爲一個研究型的小項目,需要用到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訪問,直接本地訪問時會報錯。所以訪問時要注意修改一下。