В чем разница между объявлением объектов 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" перед присвоением значения переменной. При необходимости используйте анонимную функцию для закрытия.