Смешать обозначения возражений и обычный стиль в функциях Javascript? - PullRequest
0 голосов
/ 10 сентября 2010

Небольшой вопрос для опытных программистов javascript: есть два способа объявить функцию в javascript.

A: javascript-объект-нотация

function MyLittleHouseA(name) {
    this.age = 88,
    this.name = name,
    this.getName = function()
    {
        return this.name;
    }
}

B: мм, нормальный:

function MyLittleHouseB(name) {
    this.age = 88;
    this.name = name;
    //do some more proceduaral stuff upon 'construction'
    this.age = this.age + 20; 
    this.getName = function()
    {
        return this.name;
    }
}

Я считаю более элегантным (и имею ряд объектов, которые я хочу превратить в настраиваемые параметры ...), но, возможно, захочется сделать еще кое-что при создании экземпляра, поэтому мне нужно, как показано в B. *

Можно ли их смешивать?

¡Спасибо!

1 Ответ

3 голосов
/ 10 сентября 2010

Ваш первый вариант не использует обозначение объекта. Если вы хотите использовать обозначение объекта, вы можете написать что-то вроде этого:

function MyLittleHouse(name) {
    var age = 88;
    age += 20;
    return {
        getName: function() {
            return name;
        }
    }
}

Преимущество заключается в том, что вы не используете this, что означает, что вы избежите проблем с привязкой this. Он также скрывает age и name, что может или не может быть желательным - в его нынешнем виде невозможно получить доступ к age, в то время как name является неизменным, поскольку его можно прочитать только через getName. Если вы хотите выставить age как обычное поле:

function MyLittleHouse(name) {
    var age = 88;
    age += 20;
    return {
        age: age,
        getName: function() {
            return name;
        }
    }
}
...