一個非前端攻城獅遇到的javascript的坑

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章