欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript不使用prototype和new實現繼承機制

 更新時間:2014年12月29日 11:07:58   投稿:hebedich  
這篇文章主要介紹了JavaScript不使用prototype和new實現繼承機制的相關資料,需要的朋友可以參考下

此方法并非筆者原創(chuàng),筆者只是在前輩的基礎上,加以總結,得出一種簡潔實用的JavaScript繼承方法。

      傳統的JavaScript繼承基于prototype原型鏈,并且需要使用大量的new操作,代碼不夠簡潔,可讀性也不是很強,貌似還容易受到原型鏈污染。

      筆者總結的繼承方式,簡潔明了,雖然不是最好的方式,但希望能給讀者帶來啟發(fā)。

      好了,廢話不多說,直接看代碼,注釋詳盡,一看就懂~~~

復制代碼 代碼如下:

 /**
  * Created by 楊元 on 14-11-11.
  * 不使用prototype實現繼承
  *
  */
 /**
  * Javascript對象復制,僅復制一層,且僅復制function屬性,不通用!
  * @param obj  要復制的對象
  * @returns  Object
  */
 Object.prototype.clone = function(){
     var _s = this,
         newObj = {};
     _s.each(function(key, value){
         if(Object.prototype.toString.call(value) === "[object Function]"){
             newObj[key] = value;
         }
     });
     return newObj;
 };
 /**
  * 遍歷obj所有自身屬性
  *
  * @param callback 回調函數?;卣{時會包含兩個參數: key 屬性名,value 屬性值
  */
 Object.prototype.each = function(callback){
     var key = "",
         _this = this;
     for (key in _this){
         if(Object.prototype.hasOwnProperty.call(_this, key)){
             callback(key, _this[key]);
         }
     }
 };
 /**
  * 創(chuàng)建子類
  * @param ext obj,包含需要重寫或擴展的方法。
  * @returns Object
  */
 Object.prototype.extend = function(ext){
     var child = this.clone();
     ext.each(function(key, value){
         child[key] = value;
     });
     return child;
 };
 /**
  * 創(chuàng)建對象(實例)
  * @param arguments 可接受任意數量參數,作為構造器參數列表
  * @returns Object
  */
 Object.prototype.create = function(){
     var obj = this.clone();
     if(obj.construct){
         obj.construct.apply(obj, arguments);
     }
     return obj;
 };
 /**
  * Useage Example
  * 使用此種方式繼承,避免了繁瑣的prototype和new。
  * 但是目前筆者寫的這段示例,只能繼承父類的function(可以理解為成員方法)。
  * 如果想繼承更豐富的內容,請完善clone方法。
  *
  *
  */
 /**
  * 動物(父類)
  * @type {{construct: construct, eat: eat}}
  */
 var Animal = {
     construct: function(name){
         this.name = name;
     },
     eat: function(){
         console.log("My name is "+this.name+". I can eat!");
     }
 };
 /**
  * 鳥(子類)
  * 鳥類重寫了父類eat方法,并擴展出fly方法
  * @type {子類|void}
  */
 var Bird = Animal.extend({
     eat: function(food){
         console.log("My name is "+this.name+". I can eat "+food+"!");
     },
     fly: function(){
         console.log("I can fly!");
     }
 });
 /**
  * 創(chuàng)建鳥類實例
  * @type {Jim}
  */
 var birdJim = Bird.create("Jim"),
     birdTom = Bird.create("Tom");
 birdJim.eat("worm");  //My name is Jim. I can eat worm!
 birdJim.fly();  //I can fly!
 birdTom.eat("rice");  //My name is Tom. I can eat rice!
 birdTom.fly();  //I can fly!

相關文章

  • js校驗表單后提交表單的三種方法總結

    js校驗表單后提交表單的三種方法總結

    本篇文章主要是對js校驗表單后提交表單的三種方法進行了總結介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-02-02
  • 微信小程序實現文字長按復制與一鍵復制功能全過程

    微信小程序實現文字長按復制與一鍵復制功能全過程

    微信小程序開發(fā)是依托微信的,所以他的代碼是嵌入在微信的原始代碼之中的,這篇文章主要給大家介紹了關于微信小程序實現文字長按復制與一鍵復制功能的相關資料,需要的朋友可以參考下
    2023-03-03
  • js日期插件dateHelp獲取本月、三個月、今年的日期

    js日期插件dateHelp獲取本月、三個月、今年的日期

    這篇文章主要為大家詳細介紹了js日期插件dateHelp獲取本月、三個月、今年的日期,感興趣的小伙伴們可以參考一下
    2016-03-03
  • JS簡單獲取當前日期時間的方法(如:2017-03-29 11:41:10 星期四)

    JS簡單獲取當前日期時間的方法(如:2017-03-29 11:41:10 星期四)

    這篇文章主要介紹了JS簡單獲取當前日期時間的方法,涉及javascript針對當前日期時間的簡單運算操作,需要的朋友可以參考下
    2017-03-03
  • js實現3d懸浮效果

    js實現3d懸浮效果

    本文主要分享了js實現3d懸浮效果的示例代碼,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • js代碼實現多人聊天室

    js代碼實現多人聊天室

    這篇文章主要為大家詳細介紹了js代碼實現多人聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Postman無法正常返回結果問題解決

    Postman無法正常返回結果問題解決

    這篇文章主要介紹了Postman無法正常返回結果問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Js調用Java方法并互相傳參的簡單實例

    Js調用Java方法并互相傳參的簡單實例

    下面小編就為大家?guī)硪黄狫s調用Java方法并互相傳參的簡單實例。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • Js跳出兩級循環(huán)方法代碼實例

    Js跳出兩級循環(huán)方法代碼實例

    這篇文章主要介紹了Js跳出兩級循環(huán)方法代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • 微信小程序3D輪播實現代碼

    微信小程序3D輪播實現代碼

    這篇文章主要介紹了微信小程序3D輪播實現代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09

最新評論