ключевое слово new
изменяет способ выполнения вашей функции.При использовании без new
он делает именно то, что говорит в теле функции.Но когда вы вызываете функцию с помощью new
, она работает примерно так:
function Person(name) {
var this = {}
if (this instanceof Person) {
this.name = name
} else {
throw new Error("Nutze new")
}
return this
}
Поэтому, когда вы вызываете функцию с помощью new
, this
- это совершенно новый объект, который возвращаетсяавтоматически.Когда вы вызываете функцию позже без new
, this
- это объект aPerson
, который вы создали ранее, потому что вы явно устанавливаете контекст, используя call
и apply
.Кроме того, когда вы не используете new
, функция ничего не возвращает, она присваивает только this
, поэтому notAPerson
и notAPerson2
остаются неопределенными.