+ 1 TJ Crowder имеет это.Стандарт ECMAScript делает все возможное, чтобы определить поведение встроенных функций конструктора при вызове в виде простых функций.Часто он просто вызывает себя обратно как конструктор, но есть и более сложные случаи.
конструкторы в javascript [...] не предназначены для возврата чего-либо
В общем случае конструктор может игнорировать this
и просто возвращать независимый объект:
function Thing() {
return {'foo': 1};
}
, в этом случае вы можете в равной степени использовать функцию в качестве конструктора (с new
)или простая функция.
Если конструктор ничего не возвращает, как это обычно делается для конструкторов, сам оператор new
гарантирует, что он возвращает новый объект, созданный и переданный как this
.В этом случае вы должны использовать new
.
Лучше не полагаться на конструктор, работающий как голая функция, и альтернативные варианты поведения встроенных конструкторов редко используются, поэтому обычно вам следуетпридерживаться new
.