は、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);
}
}
}
コメントがあり、その後特別ではない、他の小道具のためにコンストラクタの_.has(obj, prop) && !_.contains(keys, prop)
が、prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop))
を使用し、Constrcutor is a special case
を言います。
私はconstrcutor
にprop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop))
を使用しようとしました。その後、npm run test
すべてがOKだった。
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]
の間に違いがありますか?
プラスソース歴史やチェックインコメントへ行くための1。疑問があるときは、ルーク元に行ってください。 – jfriend00
しかし、なぜ 'toString'は特別なのでしょうか? – codefalling
または、 '_has(obj、prop)'と 'obj && obj [prop]のpropとの違いはありますか?== proto [prop]'? – codefalling