我有一个对象,我有一个名为“country”的属性作为爱尔兰。我想阻止开发人员在尝试在代码级别更新时更新属性。有没有机会这样做?如果是的话,请告诉我
var Car = function() {
this.init();
return this;
}
Car.prototype = {
init : function() {
},
country: "Ireland",
}
var c = new Car();
c.country = 'England';
我不希望国家被设置为爱尔兰以外的任何其他价值。我可以通过检查if条件来做到这一点。而不是条件,我可以有任何其他方式吗?
答案 0 :(得分:2)
一种可能的方法是使用Object.defineProperty()在init()
中将此属性定义为不可写:
Car.prototype = {
init: function() {
Object.defineProperty(this, 'country', {
value: this.country,
enumerable: true, // false if you don't want seeing `country` in `for..of` and other iterations
/* set by default, might want to specify this explicitly
configurable: false,
writable: false
*/
});
},
country: 'Ireland',
};
这种方法有一个非常有趣的特性:你可以通过原型调整属性,这将影响从那时起创建的所有对象:
var c1 = new Car();
c1.country = 'England';
console.log(c1.country); // Ireland
c1.__proto__.country = 'England';
console.log(c1.country); // Ireland
var c2 = new Car();
console.log(c2.country); // England
如果您不希望这种情况发生,请阻止修改Car.prototype
,或将country
转换为init
函数的私有变量,如下所示:
Car.prototype = {
init: function() {
var country = 'Ireland';
Object.defineProperty(this, 'country', {
value: country,
});
}
};