Я начал изучать call, apply и bind, и теперь я хочу использовать его, но у меня есть некоторые проблемы:
У меня есть функция:
let addTableRow = function() {
let template = HtmlTemplatesTelephony.ks.renderTableRow;
this.id = "";
this.creationDate = "";
this.address = "";
this.numberOfUser = "";
this.accessExisting = true;
$(DOM.tableBodyContainer).append(template(this));
};
Я объявил свойства thisв качестве значений по умолчанию
Здесь я вызываю функцию либо с .call (), либо без:
let updateTable = function() {
let locations = userData().locations;
if(locations.length > 0) {
for(let location of locations) {
UIController.addLocation.call(location);
}
} else {
UIController.addLocation();
}
};
Моя идея состояла в том, чтобы использовать значения this в addTableRow в качестве значений по умолчаниюв случае вызова функции без .call ().И когда я вызываю его с помощью .call (), я хочу перезаписать «this» значения по умолчанию.Но происходит прямо противоположное.
Я знаю, что могу передать объект в качестве параметра и установить объект по умолчанию, но есть ли другой способ сделать это с помощью .call ()?Или это неправильный вариант использования .call ()?
Спасибо за помощь!
***** ОБНОВЛЕНИЕ ******
Извините, это написано в шаблоне модуля, и я забыл упомянуть, что функция 'addTableRow' называется 'addLoaction' ввернуть объект.Вот еще немного кода:
Мой контроллер пользовательского интерфейса:
let UIController = (function() {
let DOM = {
tableHeadContainer: $('thead'),
tableBodyContainer: $('tbody'),
inputNumberLocations: $('#numberLocations'),
inputAddress: $('.js-location-address'),
inputUser: $('.js-location-user'),
inputVpn: $('.js-location-vpn'),
btnDeleteLocation: $('.js-delete-location'),
};
let addTableRow = function() {
let template = HtmlTemplatesTelephony.ks.renderTableRow;
this.id = "";
this.creationDate = "";
this.address = "";
this.numberOfUser = "";
this.accessExisting = true;
$(DOM.tableBodyContainer).append(template(this));
};
return {
getDOM: DOM,
addLocation: addTableRow,
removeLocation: removeTableRow
}
}) ();
И мой главный контроллер:
let Controller = (function(dataController, UIController) {
let updateTable = function() {
let locations = userData().locations; // locations has the same properties as in function 'addTableTow'
if(locations.length > 0) {
for(let location of locations) {
UIController.addLocation.call(location);
}
} else {
UIController.addLocation();
}
};
return {
init: function() {
setupEventListeners();
updateTable();
},
}
}) (dataController, UIController);
Надеюсь, теперь все понятно.