2016-07-27 35 views
1

プロトタイプの親の数が不明で、親の1つに実装されていることがわかっているプロパティ名が与えられている場合、その特定の親を見つける最良の方法は何ですか?継承されたプロパティを提供するオブジェクトの検索

例えば、 eへの参照のみを考えると

var a = { x: 'foo' }; 
var b = {}; 
var c = { y: 'bar' }; 
var d = { z: 'baz' }; 
var e = {}; 
b.__proto__ = a; 
c.__proto__ = b; 
d.__proto__ = c; 
e.__proto__ = d; 
alert(e.y); // 'bar' 

、私はe.yの値が実際にどこから来ることがあるため、cを見つけたいです。 (オブジェクトは正常に作成されていますが、この例では説明のために__proto__を使用しています)。実際にはceの間に任意の数のレベルを設定できます。

(そしてそれは、現実eに特定の継承されたスコーププロパティを提供し、特定の親スコープを見つけるために、質問をフレーミングするので、別の方法AngularJS $scopeされている。助け場合)

答えて

0

私の素朴な答え

function findOwnProperty(o, p) { 
    while (o) { 
     if (o.hasOwnProperty(p)) { 
      return o; 
     } 
     o = o.__proto__; // or o.$parent for scopes 
    } 
    return null; 
} 

これを行うより良い方法がありますか、それとも既にライブラリでこれを行う方法はありますか?

+2

ちょうど興味があります。投稿したのと同時に質問に答えたのはなぜですか?あなたの質問にちょうど編集することができませんでしたか? – developer033

+1

あなたはあなたのコードに問題がないので(仮定的思考)、コードレビューの質問のようです。 jsperfにも答えがあります。 –

+0

あなたの答えは間違っていると思いますが、__proto__は従来の機能ですが、私はそれを使用しません。Object.getPrototypeOf(obj) – cstuncsik

関連する問題