1

嗨,我想知道是否有一种“更聪明”的方式来检索 javascript 原型链中的顶层(或从顶层开始的任意数量的层)原型。

问题在于:

  var a = Object.create(Object.prototype, {'class' : {value : 'a'}});
  var b = Object.create(a, {'class' : {value : 'b'}});
  var c = Object.create(b, {'class' : {value : 'c'}});

我可以在不编写循环的情况下从 c 到达 a 吗?

  var topClass = c;
  while (Object.getPrototypeOf(topClass) !== Object.prototype) {
     topClass = Object.getPrototypeOf(topClass);
  } 
  console.log('expect this to be true: '+ a === topClass);
4

1 回答 1

2

我可以在不编写循环的情况下从 c 到达 a 吗?

不,你必须做你已经做过的事情,一路走到底部(或到顶部,无论你喜欢哪个术语)。

可能还值得指出的是,如果您要在浏览器上下文中执行此操作,如果您引用的代码正在处理在另一个窗口中创建的对象,那么您的循环将无法可靠地工作,因为Object.prototype一个窗口不是另一个窗口的===Object.prototype但这很重要 A)如果您在浏览器中执行此操作,并且 B)如果您可能在另一个窗口的对象上执行此操作。(如果这对你很重要,你可以循环直到你回来null,然后假设之前的两个级别是Object链中的第一个非原型......)

于 2013-04-26T16:18:16.487 回答