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

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

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 19 октября 2010

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

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

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

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

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

myObject.myProperty = "some value";
3 голосов
/ 19 октября 2010

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

function myObject() {

Это объявляет функцию при синтаксическом анализе JavaScript ...

var myObject = function () {

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

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

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

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

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

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

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

var functionName = function () {}vs function functionName () {}

0 голосов
/ 20 октября 2013

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

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

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

...