0

通常我是这样做的:

$.fn.MYPL = function (options) {
   return this.each(function () {
      myplg = Object.create(MYPL);
      myplg.init(options, this);
   });
};

IE6、IE7 和 IE8 不支持Object.create 。我刚刚意识到,我可以将Object.create替换为new ,例如:

var g = new Graph();

但我不知道..如何更改我的插件定义?

我试过了:

var myplg = new MYPL();

但它不起作用。任何帮助表示赞赏。

4

3 回答 3

2

您可以polyfillObject.create以便在 IE7 和 IE8 中使用它。

于 2013-10-05T11:46:15.220 回答
1

我看到MDN polyfill不支持任何带有属性对象的东西,所以我编写了一个稍微完整的实现,它至少可以让您设置并在有可用控制台时警告其他人,并且还会抛出正确类型的错误消息。

if (!Object.create) {
    Object.create = (function () {
        function _Object() {}

        return function(proto, props) {
            var o, k, d;
            if (proto !== null && typeof proto !== 'object')
                throw new TypeError('Object prototype may only be an Object or null');
            _Object.prototype = proto;
            o = new _Object();
            for (k in props) {
                if (typeof props[k] !== 'object')
                    throw new TypeError('Property description must be an object: ' + props[k]);
                for (d in props[k])
                    if (d === 'value')
                        o[k] = props[k].value;
                    else
                        if (console && console.warn)
                            console.warn('Object.create implementation does not support: ' + d);
            }
            return o;
        };
    }());
}
于 2013-10-05T12:05:51.767 回答
0

Object.create(MYPL)设置对象原型。对于基于构造函数的方法,您可以尝试以下代码:

function MYPLConstructor() {}

for (var key in MYPL) {
     MYPLConstructor.prototype[key] = MYPL[key];
}

var myplg = new MYPLConstructor();
于 2013-10-05T11:43:29.733 回答