bind
, call
ve apply
işlevlerini öğreniyorum. API çağrıları için geri arama ayarlamak için bind kullanıyorum.Javascript bağlama değeri değere göre mi?
function errorCallback(list, error) {
$log.error('Somehting went wrong while loading json.');
$log.log(list, error);
}
function successCallback(list, response) {
$log.info('JSON loaded successfully.');
//$log.log(list, response);
//this works
//$scope.list = list.concat(response.data);
//this doesn't
list = list.concat(response.data);
$log.log($scope.list, list);
}
Bu onları bağlayıcı am nasıl: İşte benim fonksiyonları
var successCb = successCallback.bind(null, $scope.list),
errorCb = errorCallback.bind(null, $scope.list);
Ben geri arama olarak kullandığınızda:
$scope.loadJson = function() {
$http.get('data.json').then(successCb, errorCb);
};
Onlar düzgün çağrılan alıyorsanız. Ancak endişe, list
'u güncellediğimde, iletilen gerçek parametreyi güncellememesidir. Bağlamak için parametreleri bağladığımızda, değer veya referans kullanarak bağlı olduklarını bilmek isterim? İşte plunkr.
** ** JavaScript'teki her şey değerden geçmiştir **. Nesnelerin referans olarak geçtiğini düşünüyorum – murli2308
@ murli2308: Bu yüzden bunu açıkça söyledim - çünkü pek çoğu buna inanmıyor. Nesneler, hala değer tarafından geçirilen referans değerleridir. Parametre değişkeni, nesneye bir referans (değer) içerir, "geçirilen değişken" için bir başvuru değildir. 'List' değişkenine atama, yalnızca bir değişkenin (array) olup olmadığına bakılmaksızın o değişkeni değiştirir. – Bergi
Açıklama için teşekkürler. – murli2308