Sto giocando con angular constants. Sto osservando che sono in grado di modificare il valore di constant
. Non sono in grado di ottenerlo. Perché sono in grado di cambiare il valore. Sto creando la costante in questo modo:Perché sono in grado di modificare la costante angolare?
var app = angular.module('app', []);
app.constant('Type', {
PNG: 'png',
GIF: 'gif'
});
app.constant('serialId', 'aRandomId');
Anche se creo la costante utilizzando angular.value
poi anche io sono in grado di cambiarlo. Per modificare il valore della costante sto facendo questo nel mio controller:
app.controller('MainController', ['$scope', 'Type', 'serialId', '$timeout', function($scope, Type, serialId, $timeout) {
$scope.data = {
type: Type,
serialId: serialId
};
$timeout(function() {
Type.PNG = 'this is changed';
serialId = 'new Serial Id';
console.log(serialId);
}, 1000);
}]);
Entro la defination di costante quello che ottengo è costante è somehting il cui valore non cambia ed ha un valore fisso. MDN dice che una volta dichiarata la costante non puoi cambiarla se la costante non è un oggetto. per esempio.
const x=10;
x=20;//will throw the error.
const obj={};
obj.a='ab'; //will not throw error.
Ma in caso di costante angolare quando cambio il valore non succede nulla. Non comunica nemmeno che il valore è cambiato. E anche la documentazione non parla della modifica del valore delle costanti. Se possiamo modificare il valore della costante angolare come una semplice variabile javascript, allora perché vengono chiamati costanti? Ecco il fiddle di giocare
Con 'const', l'unica porzione che è" costante "è il riferimento all'oggetto, quindi non è possibile sostituire l'oggetto con un altro. Tuttavia, l'oggetto stesso rimane mutabile e le sue proprietà possono continuare a essere modificate. ['Object.freeze()'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze) renderà l'oggetto immutabile (anche se si noti che non lo fa t farlo in modo ricorsivo). –
Vuoi dire se faccio 'Object.freeze (obj)' allora non sarò in grado di cambiare la proprietà dell'oggetto? Se sì allora perché la squadra angolare non lo sta facendo? Non permetterà a nessuno di cambiare costante. –