5

これを行う作業で、カスタム JavaScript ライブラリを使用しています。

DOM.__proto__ = Library.prototype;

内部関数/プロパティDOMオブジェクトをすばやく転送して、たとえばjQueryが行う方法と同様に使用できるようにします。

新しいプロジェクトの場合、Internet Explorer 用に実装する必要がありますが、残念ながら__proto__IE ではサポートされていません。

これに対するポリフィルのアイデア、回避策はありますか? 要件は IE10 のみです (ただし、IE9 も必要です)。

4

3 に答える 3

2

オブジェクト__proto__の作成後に割り当てる代わりに、 ( MSDN、IE9 以降でサポート) を使用して、正しいプロトタイプでオブジェクトを作成し、その後、それにプロパティを割り当てます。DOMObject.create

var DOM = {};
DOM.__proto__ = Library.prototype;
var DOM = Object.create(Library.prototype);

既存の (場合によっては外部の) オブジェクトのプロトタイプを変更したい場合は、それを避けてください。とにかく悪い習慣です。

于 2014-09-21T14:32:38.723 に答える
1

DOM 要素をそのまま直接拡張する代わりに、API でラップすることができます。

// 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>');

また、この手法を使用して Array を安全にサブクラス化することにより、Library をさらに拡張することもできます。

これが役立つことを願っています、ありがとう。

于 2013-02-11T20:35:42.453 に答える
0

それを拡張するのはどうですか:

$.extend(Element.constructor.prototype, Library.prototype);

編集:公の抗議extendにより、2014 年の JS プログラミングのコンテキストでは非常によく知られている概念であることに注意してください。プロジェクトで既に使用している少なくとも 1 つのライブラリがそれを実装している可能性があります (jQuery、Lo-Dash/Underscore、AngularJS、Ember.js...)。

于 2014-09-21T14:18:48.150 に答える