В чем разница между объявлением объектов javascript с помощью var и с функцией?

Я смущенный новичок. Я прочитал в учебнике, что вы создаете объект javascript следующим образом:

function myObject() {
    this.myProperty = "a string";
    this.myMethod = function () {
        //Method code
    }
}

Затем я прочитал где-то еще, что вы создаете объект следующим образом:

var myObject = {
    myProperty: "a string",
    myMethod : function () {
        //Method code
    }
}

В чем заключается (не субъективная) разница между ними? Есть ли официальный правильный и неправильный путь?

3 ответа

Решение

Оба объявления верны, но имеют разную семантику.

Первый тип объявлений позволяет вам создавать экземпляры ваших объектов:

var t = new myObject();
// then use t
t.myProperty = "some value";

var otherT = new myObject();
otherT.myProperty = "some other value";

Второй почти как статический объект:

myObject.myProperty = "some value";

Вот прямое сравнение...

function myObject() {

Это объявляет функцию, когда JavaScript анализируется...

var myObject = function () {

Это объявляет функцию во время выполнения.

Если вы используете метод "var", ваша функция должна быть объявлена ​​перед использованием... попробуйте этот пример.

myFunction(); // Works
myVarFunction(); // Boom

var myVarFunction = function () { alert("Hi"); };

function myFunction() { alert("Hi"); };

Так зачем использовать метод "var", если вам нужно быть более осторожным, чтобы использовать его? Это все, что связано с областью видимости... функции с областями видимости считаются лучше.

ОБНОВЛЕНИЕ: И здесь есть несколько замечательных объяснений:

var functionName = function () {} против функции functionName() {}

Основное различие между ними заключается в том, что одна переменная является локальной, а другая - глобальной. "Var" в основном определяет область действия переменной.

Когда мы добавляем var к присваиванию значения переменной, javascript гарантирует, что переменная ограничена той функцией, для которой она назначена, и не конфликтует с той же переменной имени в другой функции.

Когда мы не используем var, тогда она объявляется как глобальная функция, и могут возникнуть конфликты. Поэтому всегда желательно использовать "var" перед присвоением значения переменной. При необходимости используйте анонимную функцию для закрытия.

Другие вопросы по тегам