new而不是Object.create

时间:2013-10-05 11:33:56

标签: javascript object

通常我这样做:

$.fn.MYPL = function (options) {
   return this.each(function () {
      myplg = Object.create(MYPL);
      myplg.init(options, this);
   });
};
IE6,IE7和IE8不支持

Object.create 。我刚才意识到,我可以将{strong> Object.create 替换为new,如:

var g = new Graph();

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

我试过了:

var myplg = new MYPL();

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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;
        };
    }());
}

答案 2 :(得分:0)

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

function MYPLConstructor() {}

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

var myplg = new MYPLConstructor();