2016-10-20 4 views
0

誰かがJavaScriptのための素晴らしいオブジェクトプロトタイプを手伝ってくれましたが、jQueryではそれが壊れています。オブジェクトプロトタイプ関数jQueryの中断

jquery.min.js:2キャッチされない例外TypeError:V [G] IはObject.definePropertyブロック(下記)jQueryのエラーを停止することを見出し

関数ではない.exec 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; 

答えて

0

記述子にvalueを渡すことで、あなただけの(1何もしないと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 
}); 
+0

ありがとう、情報ありがとうございます。 Object.prototypeを使用して私の問題を解決すべきではないように思えます。よりよい解決策は何ですか?上のコードサンプルの一番下には、「目標」が表示されます。それが私が達成しようとしているものです。どんな助けでも大歓迎です。 – user1592980

+0

静的関数にしましょう: 'multiparter(mekBldr.mecha、stuck2).head01.cost'メソッドではありません。ある日、独自の 'multiparter'プロパティを持つオブジェクトに遭遇し、コードが壊れてしまいます。 – Bergi

+0

このようにしますか? 'code'function multiparter(theObj、route){ route.forEach(function {key} { theObj = theObj [key] });theObjを返します。 } 'code' – user1592980

関連する問題