对象原型函数在jQuery中破解

时间:2016-10-20 17:00:49

标签: javascript jquery object prototype

有人帮助我使用JavaScript的一个伟大的对象原型,但它打破了jQuery。在jQuery中它给出了一个错误:

jquery.min.js:2未捕获的TypeError:V [g​​] .exec不是函数

我发现Object.defineProperty块(下面)阻止了jQuery错误。但后来它不起作用。当我调用multiparter()时,它只返回“undefined”。任何人都可以帮忙解决方案吗?

Object.prototype.multiparter = function(route) {
    var newObj = this;
    route.forEach(function(key) {
        newObj = newObj[key]
    });
    return newObj;
};

Object.defineProperty(Object.prototype, 'multiparter',{
    value : function() {},
    enumerable : false
});

var mekBldr = {
    mecha: {
        heads: {
            head01: {
                cost: 0,
                classification: ''
            }
        },
        rightLimbs: {
            legs: {
                rightleg01: {
                    cost: 0,
                    classification: ''
                }
            }
        },
        leftLimbs: {
            legs: {
                leftleg01: {
                    cost: 0,
                    classification: ''
                }
            }
        }
    }
};
var part = 'heads';
var stuck2 = [part];
var part1 = 'leftLimbs';
var part2 = 'legs';
var stuck = [part1, part2];
mekBldr.mecha.multiparter(stuck2).head01.cost = 2;
//goal: mekBldr.mecha.leftLimbs.legs.leftleg01.cost = 5;
mekBldr.mecha.multiparter(stuck).leftleg01.cost = 5;

1 个答案:

答案 0 :(得分:1)

通过将value传递给描述符,您只是用该空函数覆盖了该方法(该函数无效且返回undefined)。如果你真的想要define a method on Object.prototype(你绝对不应该这样做),你需要使用

Object.defineProperty(Object.prototype, 'multiparter', {
    value: function(route) {
        return route.reduce(function(newObj, key) {
            return newObj[key]
        }, this);
    },
    enumerable: false,
    configurable: true
});