在javascript原型链中检索顶级原型

时间:2013-04-26 16:15:10

标签: javascript inheritance prototype prototype-chain

您好我想知道是否有一种“更聪明”的方式来检索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获取吗?

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

1 个答案:

答案 0 :(得分:2)

  

我可以在不写循环的情况下从c获取吗?

不,你必须做你已经完成的事情,一直走到最底层(或者到你想要的任何一个顶部)。

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