国产探花免费观看_亚洲丰满少妇自慰呻吟_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、關于函數的綁定
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 旬阳县| 罗田县| 亳州市| 新化县| 科技| 崇明县| 恭城| 金溪县| 香格里拉县| 唐海县| 定南县| 拜城县| 雷州市| 读书| 黑河市| 乌兰县| 开远市| 奉节县| 会泽县| 张家口市| 上犹县| 定安县| 九台市| 孟津县| 安化县| 漠河县| 定州市| 华蓥市| 昌都县| 建湖县| 阿拉善左旗| 出国| 陆河县| 铜梁县| 尉犁县| 汽车| 广宗县| 湘潭市| 景谷| 临清市| 乐陵市|