我们在工作时使用自定义JavaScript库:
DOM.__proto__ = Library.prototype;
快速传输内部函数/属性DOM对象,以便它可以像jQuery一样使用它。
对于新项目,我们需要为Internet Explorer实现它,但不幸的是,IE不支持__proto__
。
为此填料的任何想法,解决方法?该要求仅限IE10(但IE9也不错)。
答案 0 :(得分:2)
在创建__proto__
对象后,不要分配给DOM
,而是使用{IE}支持的Object.create
(MSDN)创建对象使用正确的原型,然后为其分配属性。
var DOM = {}; DOM.__proto__ = Library.prototype;
var DOM = Object.create(Library.prototype);
如果您想修改现有(甚至可能是外国)对象的原型,请避免使用它。无论如何,这是一个不好的做法。
答案 1 :(得分:1)
您可以使用API包装DOM元素,而不是直接扩展DOM元素;
// Wrapping Constructor
function Library(element) {
this.element = element;
}
// Whatever it is your library does
Library.prototype = {
// some example method
html: function(markup) {
// refer to "this.element" instead of "this"
this.element.innerHTML = markup;
}
};
// example
var wrappedElement = new Library(document.getElementById('unique'));
// refer to the API rather than the Element directly
wrappedElement.html('<span>Hello World</span>');
您还可以通过safely subclassing Array with this technique更多地扩展库。
希望这有帮助,谢谢。
答案 2 :(得分:0)
如何扩展它:
$.extend(Element.constructor.prototype, Library.prototype);
编辑:由于公众强烈抗议,我注意到extend
在2014年的JS编程环境中是一个非常熟悉的概念。您可以在网上找到它是什么以及它是如何工作的众多例子,并且你的项目中至少有一个你已经使用过的库实现它(jQuery,Lo-Dash / Underscore,AngularJS,Ember.js ......) )