我正在尝试学习javascript,并且已经看到我们可以使用对象的属性的属性。 (我的意思是值,可写,可枚举,可配置)。
根据我所学到的,我认为更改 {configurable:false} 会限制更多配置更改,例如 {writable:false,enumerable:false}
我在下面写了试一试,但我得到的结果与我预期的结果完全不同。
我对 {configurable:false} 的含义是错误的,或者代码是否有问题? TIA。
$scope.favorite = {};
$scope.favorite.checked = $window.localStorage.getItem("favorites");
if($scope.favorite.checked === null) {
$scope.favorite.checked = true;
}
$scope.favoriteChange = function() {
$window.localStorage.setItem("favorites", $scope.favorite.checked);
};
答案 0 :(得分:1)
MDN - seal
可配置属性
可配置属性同时控制是否可以从对象中删除属性以及是否可以更改其属性(可写为false除外)Object.seal()
方法密封对象,防止向其添加新属性并将所有现有属性标记为不可配置。只要它们是可写的,当前属性的值仍然可以改变。
您需要freeze
MDN - freeze
与Object.seal()的比较 使用Object.seal()密封的对象可以更改其现有属性。使用Object.freeze()冻结的对象中的现有属性是不可变的。
"use strict";
window.onload = function(){
var o = {x:1};
//Make "x" non-configurable
Object.defineProperty(o, "x", {configurable: false});
//freeze "o";
Object.freeze(o);
console.log(Object.getOwnPropertyDescriptor(o, "x"));
//outputs => Object { value: 1, writable: true, enumerable: true, configurable: false }
console.log(Object.isSealed(o));
//outputs => true
Object.defineProperty(o, "x", {writable: true}); //Now this doesn't cause.
console.log(Object.getOwnPropertyDescriptor(o, "x"));
//outputs => Object { value: 1, writable: false, enumerable: true, configurable: false }
}