gpt4 book ai didi

javascript - 为什么是 "constructor is a special case"?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:43:00 24 4
gpt4 key购买 nike

在下划线中,有一个collectNonEnumProps :

var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'
];

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);
}
}
}

有评论说Constrcutor是特例,然后用_.has(obj, prop) && !_.contains(keys, prop)构造器但 prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) 用于其他不特殊的 Prop 。

我曾尝试将 prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) 用于 constrcutor。然后 npm run test 一切正常。

var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString', 'constructor'
];

var collectNonEnumProps = function(obj, keys) {
var nonEnumIdx = nonEnumerableProps.length;
var constructor = obj.constructor;
var proto = _.isFunction(constructor) && constructor.prototype || ObjProto;


while (nonEnumIdx--) {
prop = nonEnumerableProps[nonEnumIdx];
if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {
keys.push(prop);
}
}
};

那么,为什么 underscore 对待 constrcutor 特殊?

或者,_.has(obj, prop)prop in obj && obj[prop] !== proto[prop] 有什么不同吗?

最佳答案

使用 git blame显示它是 added in a commit带有消息“修复 IE 不可枚举的属性”。

从那里开始,更多的挖掘表明它是为了修复 IE 8 和更早版本中的这个错误:IE8 property enumeration of replaced built-in properties (e.g. `toString`)

关于javascript - 为什么是 "constructor is a special case"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36996835/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com