您好我想知道是否有一种“更聪明”的方式来检索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);
答案 0 :(得分:2)
我可以在不写循环的情况下从c获取吗?
不,你必须做你已经完成的事情,一直走到最底层(或者到你想要的任何一个顶部)。
可能还值得指出的是,如果您要在浏览器上下文中执行此操作,如果您引用的代码正在处理在另一个窗口中创建的对象,则您的循环将无法可靠地工作,因为一个窗口的Object.prototype
不是===
另一个窗口的Object.prototype
。但这很重要A)如果你在浏览器中这样做,并且B)如果你可能在另一个窗口的对象上做这件事。 (如果它对你很重要,你可以循环直到你回到null
,然后假设前面的两个级别是链中的第一个非Object
原型......)