2016-07-06 169 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 =新弹出等 –