2016-06-15 1 views
1

私は既存の機能を安全にする方法を探していますinstanceof別の機能。IE8で__proto__を使用しています

私は__proto__がIE8でサポートされていないことをここで読む:https://stackoverflow.com/a/12431941/665261

私はノックアウトJSはIE8をサポートしてお読みください。http://knockoutjs.com/documentation/browser-support.html

私は__proto__を使用してノックアウトを見つけました:https://github.com/knockout/knockout/blob/241c26ca82e6e4b3eaee39e3dc0a92f85bc1df0c/src/utils.js#L21

どのようにそれはノックアウトすることができ__proto__を使用し、まだIE8で動作しますか?

+0

* "既存の関数を別の関数のインスタンスにするための安全な方法を探しています。" *関数は 'Function'のインスタンスです。 **オブジェクト**は、別のコンストラクタ関数によって作成されたインスタンスのように見せかけていますか?私にX/Y問題のように聞こえる。 –

+0

@ T.J.CrowderはX/Yではありません。プロトタイプの継承をより深く理解するために、より広い範囲を捜しながら、私はこの特定の質問に導かれました。あなたの迅速で啓発的な応答に感謝します! –

+0

ああ、つまらない。ええ、時には、より多くのツールの知識を自分自身に与えるために、技術を調査することもあります。あなたはそれを見つけたと確信していますが、理想的には '__proto__'(ブラウザーのみのハック)ではなく、可能なら' Reflect.setPrototypeOf'(http://www.ecma-international。 org/ecma-262/6.0/index.html#sec-reflect.setprototypeof)または['Object.setPrototypeOf'](http://www.ecma-international.org/ecma-262/6.0/index.html#sec -object.setprototypeof)。 (可能であれば、既存のオブジェクトのプロトタイプを変更しないように...) –

答えて

1

ノックアウトが__proto__を使用していてもIE8で動作するのはどうでしょうか?

__proto__がブラウザでサポートされているかどうかを検出するため、実行中であり、サポートされている場合のみ使用します。

ちょうどあなたがあなたにリンクされている1後の行のカップルが見つける:

var canSetPrototype = ({ __proto__: [] } instanceof Array); 

を...と、オブジェクトを定義する際のさらに下:

setPrototypeOfOrExtend: canSetPrototype ? setPrototypeOf : extend, 

次にKOはがsuppoかどうかによってsetPrototypeOfOrExtendを使用します落ち着いた。

関連する問題