iproger
@iproger
Безответственный гений

Как в JS упростить call?

Только начинаю работать с объектами в JS и не знаю как лучше сохранять контекст.
Предположим:
var app = new function() {
this.data = 'Привет ';
this.method = function(name) {
alert(this.data+', '+name+'!');
};
};

// не нравится данная запись, можно ли использовать функцию, но чтобы укоротить?
app.method.call(app,'Маша');
  • Вопрос задан
  • 2495 просмотров
Решения вопроса 2
Вам как раз и не нужно вызывать функцию через `call` в вашем примере. Функция вызвана через property accessor, всегда вызывается в контексте обьекта к которому доступаемся (если конечно функция не была "пробиндина" к другому контексту).

+ лучше методы класса обьявлять через прототип, вот как это должно выглядеть

function App(){
    // `data` тоже в прототип можно вынести
}

App.prototype = {
    data: 'Привет ',
    method: function(name){
        alert(this.data + ', ' + name + '!');
    }
};

var app = new App();

app.method('Маша');
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
А зачем вы явно контекст указываете? Боитесь что он внезапно поменяется? Используйте .bind тогда (либо нативный, либо из lodash/underscore/jquery.proxy)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
app.method('Маша');
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы