你可以使用
object = new getClass()(); // object = new (getClass());
其更好地解释什么发生。它调用函数getClass
并为新实例返回一个对象。
function getClass(name) {
switch (name) {
case 'string': return String;
case 'array': return Array;
default: return Object;
}
}
var typeObject = new getClass()(),
typeArray = new getClass('array')(),
typeString = new getClass('string')();
[typeObject, typeArray, typeString].forEach(function (o) {
console.log(typeof o);
if (typeof o === 'object') {
console.log('hasOwnProperty' in o);
console.log('splice' in o);
}
});
.as-console-wrapper { max-height: 100% !important; top: 0; }
括号没有做任何事情,他们只是用于分组的事情。这似乎是程序员的个人风格或过于谨慎(switch语句中也有不必要的括号。) – JJJ
@JJJ错误。括号是确保'getClass'不带参数被调用,然后在结果上调用'new',比如'String'。如果没有括号,它会调用'getClass'函数本身作为构造函数。 – 2017-02-28 12:15:18
@torazaburo,你想回答这个问题吗?它可以和'obj = new getClass()();'一起工作,这比其他风格更明显。 –