2015-07-26 3 views
1

Я написал следующий кодJavascript класс, объект, новый

1.

function Car() { 
    this.make = "BMW" 
} 

var x = new Car().make 
alert(x) 

Результат: показано предупреждение BMW

2.

function Car() { 
    this.make = "BMW" 
} 

var x = Car().make //removed new keyword 
alert(x) 

Результат: не показывать предупредить BMW. Ошибка в консоли «Не удается прочитать свойство„сделать“неопределенных»

3.

function Car() { 
    this.make = "BMW" 
    return this  //added return 
} 

var x = Car().make //removed new keyword 
alert(x) 

Результат: показано предупреждение BMW

Может кто-нибудь объяснить, что именно происходит, когда я вернусь «это». ..?

ответ

3

При вызове Car() (без оператора new), внутри функции, this относится к глобальному контексту (например, window если вы в браузере). Когда вы return this;, вы возвращаете глобальный объект. Вы также обнаружите, что ваша функция установить make свойства глобального объекта "BMW" (то есть, alert(Car().make) с последующим alert(make) должен предупредить ту же вещь дважды. Без return this; возвращаемого значения по умолчанию из функции является undefined.

Когда ты используйте оператор new, новый объект создается и привязан к this внутри функции во время ее выполнения. Оператор new возвращает все, что возвращается конструктору, или новый объект, если конструкция ничего не возвращает. Дополнительные сведения об этом см. в разделе the docs.

Смежные вопросы