web-dev-qa-db-ja.com

Object.createはie8ではサポートされていません

Jqueryでobject.createを使用して日付ドロップダウンを作成するプラグインの問題に遭遇しました。 IE 8で、次のエラーがスローされていることに気づきました:

SCRIPT438: Object doesn't support property or method 'create'

これがコードです:

var dropdateobj = Object.create(dropdatefuncs);
dropdateobj.create(options, this);
$.data(this, 'dropdate', dropdateobj);

IE8以上のクロスブラウザー互換の良い回避策は何ですか?

前もって感謝します!

21
klye_g

this one を含む、これを提供するシムがいくつかあります。

ご了承ください - Object.createできませんただし、列挙できないプロパティまたはゲッターとセッターを持つプロパティを作成できるため、これは、ES5以前のすべてのブラウザでは実行できません。 (ES5より前のブラウザーでは、独自の構文を使用してゲッターとセッターを実行できますが、IE8ではできません。)疑似シム処理のみが可能です。

しかし、疑似シムはあなたが引用したユースケースのために行います。

完全を期すために、シムできる部品の簡単なバージョンを次に示します。

if (!Object.create) {
    Object.create = function(proto, props) {
        if (typeof props !== "undefined") {
            throw "The multiple-argument version of Object.create is not provided by this browser and cannot be shimmed.";
        }
        function ctor() { }
        ctor.prototype = proto;
        return new ctor();
    };
}
20
T.J. Crowder

これにより、Object.create()がIE 8で動作します。

シム/シャムを試しましたが、うまくいきませんでした。

if (typeof Object.create !== 'function') {
 Object.create = function(o, props) {
  function F() {}
  F.prototype = o;

  if (typeof(props) === "object") {
   for (prop in props) {
    if (props.hasOwnProperty((prop))) {
     F[prop] = props[prop];
    }
   }
  }
  return new F();
 };
}
0
Sorter