国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

javascript 中對象的繼承〔轉貼〕

2024-09-06 12:43:41
字體:
來源:轉載
供稿:網友
1、關于javascript的apply和call函數
prototype.js中用了大量的apply和call函數,不注意會造成理解偏差。
官方解釋:應用某一對象的一個方法,用另一個對象替換當前對象。
apply與call的區別是第二個參數不同。apply是  數組或者arguments 對象。而call是逗號隔開的任何類型。

apply,call方法最讓人混淆的地方也是apply,call的特色。但最好不要濫用。
能改變調用函數的對象。如下例,函數中用到this關鍵字,這時候this代表的是apply,call函數的第一個參數。

<script src="prototype1.3.1.js"></script>
<input type="text" id="myText"  value="input text">
<script>
   function Obj(){
       this.value="對象!";
   }
   var value="global 變量";
   function Fun1(){
       alert(this.value);
   }
   window.Fun1();
   Fun1.apply(window); 
   Fun1.apply($('myText')); 
   Fun1.apply(new Obj()); 
</script>

2、關于閉包 
prototype.js在Class.create,bind等中用到javascript的閉包特色。但整體上prototype.js對于強大的閉包特性用的不多。大家可以參閱我翻譯的篇文章了解閉包。
3、讓我比較反感的兩個方法
(1)
var Class = {
  create: function() {
    return function() { 
      this.initialize.apply(this, arguments);
    }
  }
}
很討厭用別的語言的風格來寫javascript。用這個方法構造自定義類  并沒有覺得有多方便,減少代碼行數,只會讓人難理解,多定義一個initialize方法。
其實討厭這條有些牽強,不過修改Object的原型對象就有點過分了。
(2)Object.prototype.extend
  先不過你取個extend的名字會讓熟悉java的人引起的歧義。修改Object的prototype就說不過去了。不知道作者是怎么考慮的。當你for in循環對象是,麻煩就來了。可能有人會問你for in干嗎。 我一個項目中既用了DWR,也用了prototype.js,dwr返回的javascript對象都多了個exetend屬性,還得特殊處理。
  以前我比較過dojo和prototype.js中繼承的實現,現在我明白個道理。對于javascript這種沒有靜態類型檢查,語法寬松的語言來講,如果你選擇了某個js類庫,那你也必須適應作者寫javascript的風格。prototype.js的作者對extend的使用爐火純青,如果我們不當它只是個屬性拷貝的函數的話,多讀讀prototype.js的代碼是好的。
4、關于函數的綁定
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大兴区| 容城县| 台中市| 孝义市| 长乐市| 万山特区| 礼泉县| 武穴市| 格尔木市| 五常市| 班戈县| 韶山市| 岳西县| 新宁县| 栾川县| 轮台县| 延川县| 互助| 甘洛县| 香格里拉县| 沈阳市| 泰来县| 岳阳市| 鄂尔多斯市| 邓州市| 绵竹市| 图们市| 中西区| 洛扎县| 罗城| 公主岭市| 句容市| 思茅市| 汉中市| 九寨沟县| 新乡县| 普宁市| 宝鸡市| 南安市| 西昌市| 赤城县|