新增功能(getClass())是什么意思?
问题描述:
function getClass(name) {
switch (name) {
case 'string': return String;
case 'array': return Array;
default: return Object;
}
}
obj = new (getClass());
所以任何人都可以解释这些代码,我明白新的但什么是新的()?新增功能(getClass())是什么意思?
答
obj = new (getClass());
这意味着:
调用
getClass
功能不带参数(getClass()
)。返回String
或Array
或Object
,后者在这种情况下。拨打电话
new
返回值为getClass()
。在这种情况下,这相当于new Object
,它创建了一个新对象。
答
你可以使用
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()();'一起工作,这比其他风格更明显。 –