Javascript 查找提供继承属性的对象

Javascript 查找提供继承属性的对象,javascript,angularjs,Javascript,Angularjs,给定一个具有未知数量原型父对象的对象,以及已知在其中一个父对象上实现的属性名称,找到该特定父对象的最佳方法是什么 例如 只要参考e,我就想找到c,因为e.y的值实际上来自于此。(对象是正常创建的;在本例中,我只是使用\uu proto\uu进行说明。)实际上,在c和e之间可以有任意数量的级别 (如果有帮助,事实上,e是一个AngularJS$scope,因此构建问题的另一种方法是找到提供特定继承范围属性的特定父范围。)我天真的回答如下: function findOwnProperty(o, p

给定一个具有未知数量原型父对象的对象,以及已知在其中一个父对象上实现的属性名称,找到该特定父对象的最佳方法是什么

例如

只要参考
e
,我就想找到
c
,因为
e.y
的值实际上来自于此。(对象是正常创建的;在本例中,我只是使用
\uu proto\uu
进行说明。)实际上,在
c
e
之间可以有任意数量的级别


(如果有帮助,事实上,
e
是一个AngularJS
$scope
,因此构建问题的另一种方法是找到提供特定继承范围属性的特定父范围。)

我天真的回答如下:

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

有没有更好的方法可以做到这一点,或者在某些库中已经有这样的方法了?

我天真的回答如下:

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

有没有更好的方法可以做到这一点,或者有些图书馆已经有了这样的方法?

只是出于好奇。。为什么你在发帖的同时回答了你的问题?这难道不能仅仅是对你的问题的编辑吗?看起来像是一个代码审查问题,因为你的代码没有问题(假设性思维)。也可能是关于jsperf的答案。我认为你的答案也是错误的,proto是一个遗留功能,我不会使用它,这里有Object.getPrototypeOf(obj)只是出于好奇。。为什么你在发帖的同时回答了你的问题?这难道不能仅仅是对你的问题的编辑吗?看起来像是一个代码审查问题,因为你的代码没有问题(假设性思维)。也可能是关于jsperf的答案。我认为你的答案也是错误的,proto是一个遗留功能,我不会使用它,这里有Object.getPrototypeOf(obj)