2014-01-16 40 views
0

如何创建一个Map,需要new并且它不是必需的对象?Map vs Object的和谐ES6构造函数类型?

var o = new Object(); 
var m = new Map(); 

var constructorObject = o.constructor; 
var constructorMap = m.constructor; 

var newObject = constructorObject(); 
var newMap = constructorMap(); //splat 

最后一行产生,

TypeError: Constructor Map requires 'new' 
    at Map (native) 

回答

0

这仅仅依赖于Map功能的实现。您在Chrome中遇到此错误,而在夜间拨打Map();会为您返回一个美丽的全新地图。

请记住,您可以在不使用运算符new的情况下创建对象的事实或多或少是无用的(人们可能会认为它适用于构造函数Object,因为它不会简单地返回一个新对象,但是一个类型与你传递的参数类型相匹配的对象)。你可以对任何构造函数都做同样的事情:

function Test() { 
    if(!(this instanceof Test)) return new Test; 
} 
Test(); // equivalent to *new Test;*