Javascript 迭代所有属性,而不仅仅是可枚举属性
此代码仅迭代对象的可枚举属性:Javascript 迭代所有属性,而不仅仅是可枚举属性,javascript,Javascript,此代码仅迭代对象的可枚举属性: for (variable in object) statement 以下代码迭代所有属性,而不仅仅是可枚举属性: function getAllPropertyNames(obj) { var result = []; while (obj) { Array.prototype.push.apply(result, Object.getOwnPropertyNames(obj)); obj = Object.g
for (variable in object)
statement
以下代码迭代所有属性,而不仅仅是可枚举属性:
function getAllPropertyNames(obj) {
var result = [];
while (obj) {
Array.prototype.push.apply(result, Object.getOwnPropertyNames(obj));
obj = Object.getPrototypeOf(obj);
}
return result;
}
while
块中的行如何将obj
的自身属性名称添加到结果中
getPrototypeOf
返回null
。对于常规对象,当您尝试获取Object.prototype
的原型时会发生这种情况
while
块中的行如何将obj
的自身属性名称添加到结果中
Array.prototype.push.apply(result,Array)
将数组中的每个元素作为参数传递给result.push
。这就像调用result.push(a[0],a[1],…)
其中a
是Object.getOwnPropertyNames(obj)
1。当Object.getPrototypeOf(obj)
返回null
。2. <代码>Array.prototype.push.apply(result,Object.getOwnPropertyNames(obj))
与var tmp=Object.getOwnPropertyNames(obj)相同;结果.推送(tmp[0],tmp[1],…)
。了解有关的更多信息。请从MDN:应用。另请参见为什么需要Object.getPrototypeOf(obj)?@chefcurry7以便OP也可以收集继承的属性。为了澄清Felix的评论(这应该是答案),Object.Prototype的[[Prototype]]
为空(请参见),这是所有内置原型链的结尾。这并不能保证与主机对象一起工作,但是对于与当前标准一致的实现,它可能会工作。哦,我看到ECMAScript ed 6不再有主机对象,它是由非sequitur:对象定义的,该对象不具有所有对象都必须支持的一个或多个基本内部方法的默认行为。如果某个对象必须由所有对象支持,那么如何允许某些对象不支持它?也许应该这样写:“……所有内置对象”。