Javascript jQuery中的对象原型函数中断
有人帮我设计了一个很棒的JavaScript对象原型,但它在jQuery中崩溃了。在jQuery中,它给出了一个错误: jquery.min.js:2未捕获类型错误:V[g]。exec不是函数 我发现Object.defineProperty块(下面)停止了jQuery错误。但那就不行了。当我调用multiparter()时,它只返回“undefined”。有人能帮忙解决吗Javascript jQuery中的对象原型函数中断,javascript,jquery,object,prototype,Javascript,Jquery,Object,Prototype,有人帮我设计了一个很棒的JavaScript对象原型,但它在jQuery中崩溃了。在jQuery中,它给出了一个错误: jquery.min.js:2未捕获类型错误:V[g]。exec不是函数 我发现Object.defineProperty块(下面)停止了jQuery错误。但那就不行了。当我调用multiparter()时,它只返回“undefined”。有人能帮忙解决吗 Object.prototype.multiparter = function(route) { var newO
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;
通过将
值
传递给描述符,您已经用该空函数覆盖了该方法(该函数不执行任何操作,并返回未定义的
)。如果你真的想(你绝对不应该这么做),你需要使用
Object.defineProperty(Object.prototype, 'multiparter', {
value: function(route) {
return route.reduce(function(newObj, key) {
return newObj[key]
}, this);
},
enumerable: false,
configurable: true
});
谢谢你的信息。听起来我不应该用Object.prototype来解决我的问题。什么是更好的解决方案?在上面代码示例的底部,您可以看到“目标”。这就是我想要实现的。任何帮助都将不胜感激。使其成为一个静态函数:
multiparter(mekBldr.mechan,stuck2)。head01.成本
不是一种方法。有一天你会遇到一个对象,它有自己的multiparter
属性,你的代码会崩溃。像这样吗code
function multiparter(theObj,route){route.forEach(function(key){theObj=theObj[key]});返回theObj;}code
@user1592980完全正确。虽然我建议使用reduce
而不是forEach
像我的答案中那样:-)