2016-07-27 19 views
1

給定一個對象具有未知數量的父級原型,並且已知可以在其中一個父級上實現的屬性名稱,找到該特定父級的最佳方法是什麼?查找提供繼承屬性的對象

例如。

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一個參考,我想找到c,因爲它是其中e.y值實際上來自。 (這些對象是正常創建的;本例中我僅使用__proto__作爲說明目的。)實際上,在ce之間可以有任意數量的級別。

(而如果有幫助,在現實中e是AngularJS $scope,取景的問題,這樣的替代方法是找到特定父範圍,提供了一個特殊的遺傳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