2016-07-06 67 views
0

我以這種方式將jQuery擴展爲ES6類。它似乎完成了一切,但我擔心速度,所以我也進行了測試。它可以在0.5秒內創建1000個新的自己的實例。這在MOST中用於生成作爲對象的錶行(對於複雜的,更新不能自行清空的表)。我想知道是否有更好的方式來繼承jQuery的原型比這 this.__proto__ = $.extend(true, this.__proto__, this.__proto__.__proto__)用ES6擴展jquery

class Popup extends jQuery.fn.init { 
    constructor() { 
    super('<div>test</div>'); 
    this.$wrapper = null; 

    this.__proto__ = $.extend(true, this.__proto__, this.__proto__.__proto__) 
    return this; 
    } 

    test() { 
    console.log('hi') 
    } 
} 

https://jsfiddle.net/ctyzaphw/3/

+1

1000實例需要500ms的?這太可怕了。 – Bergi

+1

爲什麼你認爲'extends $ .fn.init'不足以繼承jQuery方法?順便說一句,jQuery只有一個原型,我不知道你爲什麼在這裏使用複數。 – Bergi

+0

'$ .extend(true,this .__ proto__,this .__ proto __.__ proto __)',創建一個深度拷貝,這本身是一個相對緩慢的過程,但出於好奇,我想知道你會從中得到什麼好處? – Rohit416

回答

0

那是一個有趣的實驗。 但是你可能想看es15中的Object.assign。全面介紹在這裏:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

作品,採取了目標和源Object.assign(目標,源)

+0

您剛增加它的速度提高了38%:) – Tester232323

+0

該死的,最終無法進一步擴展類未捕獲的TypeError:類構造函數彈出窗口不能在沒有'new'的情況下調用 – Tester232323

+1

如果你是淺拷貝類。該副本也必須是新的。類只能在新的時候被調用。所以popup2 =新彈出等 –