看undersource.js源码中nonEnumerableProps函数貌似是为了把对象中不可遍历的属性加入key返回,而源码注释中提到ie9以下枚举bug,测试过hasEnumBug值都是为false,那collectNonEnumProps函数就不会被执行了,其次~返回这些不可遍历的属性值应该没有什么用处吧~再者为什么要单独处理constructor属性,相关源码如下:
function collectNonEnumProps(obj, keys) {
var nonEnumIdx = nonEnumerableProps.length;
var constructor = obj.constructor;
var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;
// Constructor is a special case.
var prop = 'constructor';
if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);
while (nonEnumIdx--) {
prop = nonEnumerableProps[nonEnumIdx];
if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {
keys.push(prop);
}
}
}
MYYA
相关分类