2017-02-28 96 views
1
function getClass(name) { 
    switch (name) { 
     case 'string': return String; 
     case 'array': return Array; 
     default: return Object; 
    } 
} 
obj = new (getClass()); 

所以任何人都可以解释这些代码,我明白新的但什么是新的()?新增功能(getClass())是什么意思?

+0

括号没有做任何事情,他们只是用于分组的事情。这似乎是程序员的个人风格或过于谨慎(switch语句中也有不必要的括号。) – JJJ

+2

@JJJ错误。括号是确保'getClass'不带参数被调用,然后在结果上调用'new',比如'String'。如果没有括号,它会调用'getClass'函数本身作为构造函数。 – 2017-02-28 12:15:18

+0

@torazaburo,你想回答这个问题吗?它可以和'obj = new getClass()();'一起工作,这比其他风格更明显。 –

回答

1
obj = new (getClass()); 

这意味着:

  1. 调用getClass功能不带参数(getClass())。返回StringArrayObject,后者在这种情况下。

  2. 拨打电话new返回值为getClass()。在这种情况下,这相当于new Object,它创建了一个新对象。

1

你可以使用

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