Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么;构造函数是一个特例;?_Javascript_Underscore.js - Fatal编程技术网

Javascript 为什么;构造函数是一个特例;?

Javascript 为什么;构造函数是一个特例;?,javascript,underscore.js,Javascript,Underscore.js,在下划线中,有一个: 有一条评论说,Constrcutor是一个特例,然后使用。.has(obj,prop)&&&。包含(键,道具)用于构造函数,但在obj中包含道具和&obj[prop]!=原型[道具]&&。包含(键、道具)),用于非特殊的其他道具 我试过在obj中使用prop&&obj[prop]!==原型[道具]&&。包含(键、道具))用于收缩器。然后npm运行测试一切正常 var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toS

在下划线中,有一个:

有一条评论说,Constrcutor是一个特例,然后使用
。.has(obj,prop)&&&。包含(键,道具)
用于构造函数,但在obj中包含
道具和&obj[prop]!=原型[道具]&&。包含(键、道具))
,用于非特殊的其他道具

我试过在obj中使用
prop&&obj[prop]!==原型[道具]&&。包含(键、道具))
用于
收缩器
。然后
npm运行测试
一切正常

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);
        }
    }
};
那么,为什么
下划线
treat
constructor
special?


或者,
\uhas(obj,prop)
和obj中的
prop和&obj[prop]!=proto[prop]

使用表明它带有消息“修复IE不可枚举属性”


在此基础上,进一步挖掘揭示了在IE 8和更早版本中修复此缺陷的方法:

加上一个用于查看源历史记录和签入注释的方法。如果有疑问,请转到源代码Luke…但是为什么
toString
在这里不特别?或者,
\uuj.has(obj,prop)
和obj中的
prop和&obj[prop]!=proto[prop]
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);
        }
    }
};