Tôi đang chơi với angular constants. Tôi quan sát thấy rằng tôi có thể thay đổi giá trị của constant
. Tôi không thể làm được. Tại sao tôi có thể thay đổi giá trị. Tôi đang tạo ra hằng số như sau:Tại sao tôi có thể thay đổi hằng số góc?
var app = angular.module('app', []);
app.constant('Type', {
PNG: 'png',
GIF: 'gif'
});
app.constant('serialId', 'aRandomId');
Thậm chí nếu tôi tạo hằng số bằng cách sử dụng angular.value
thì tôi cũng có thể thay đổi nó. Để thay đổi giá trị của hằng số tôi đang làm điều này trong bộ điều khiển của tôi:
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);
}]);
Đến, định nghĩa của liên tục những gì tôi nhận được là không đổi là somehting có giá trị không thay đổi và nó có một giá trị cố định. MDN nói rằng một khi bạn khai báo hằng số bạn không thể thay đổi nó nếu hằng số không phải là một đối tượng. ví dụ.
const x=10;
x=20;//will throw the error.
const obj={};
obj.a='ab'; //will not throw error.
Nhưng trong trường hợp hằng số góc khi tôi thay đổi giá trị thì không có gì xảy ra. Nó thậm chí không thông báo rằng giá trị được thay đổi. Và có tài liệu cũng không nói về việc thay đổi giá trị của hằng số. Nếu chúng ta có thể thay đổi giá trị của hằng số góc như một biến javascript đơn giản thì tại sao chúng được gọi là hằng số? Đây là fiddle để chơi
Với 'const', phần duy nhất" liên tục "là tham chiếu đến đối tượng, vì vậy bạn không thể thay thế đối tượng bằng đối tượng khác. Tuy nhiên, bản thân đối tượng vẫn còn có thể thay đổi và các thuộc tính của nó có thể tiếp tục được sửa đổi. ['Object.freeze()'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze) sẽ làm cho đối tượng bất biến (mặc dù lưu ý rằng nó không ' t làm theo cách đệ quy). –
Bạn có nghĩa là nếu tôi làm 'Object.freeze (obj)' thì tôi sẽ không thể thay đổi thuộc tính của đối tượng? Nếu có thì tại sao nhóm góc cạnh không làm việc đó? Nó sẽ không cho phép bất cứ ai thay đổi liên tục. –