在javascript中设置没有setter的对象属性时会发生什么

时间:2017-06-19 14:33:54

标签: javascript

Authorization: API_KEY:GENERATED_SIGNATURE

我正在学习吸气剂和二传手。然后我意识到Javascript在设置Authorization的值时没有抛出任何错误而没有它的setter方法。

构造函数外部的var vehicle = function(){ var type; var tyre; this.tellTyres = function(){ console.log(type + " has " + tyre + " tyres"); }; this.__defineGetter__("type", function(){ return type; }); this.__defineSetter__("type", function(val){ type = val; }); this.__defineGetter__("tyre", function(){ return tyre; }); // this.__defineSetter__("tyre", function(val){ // tyre = val; // }); }; var car = new vehicle(); car.type = "Car"; car.tyre = 4; console.log(car.tyre); car.tellTyres(); 属性会发生什么。 4值存储在哪里?它会覆盖吗?

1 个答案:

答案 0 :(得分:2)

JavaScript对象更像是字典,而不像Java对象。这意味着您只需使用属性访问器运算符.[]来设置和获取对象的属性:

var obj = { foo: 'bar' };
obj.baz = 17;
console.log(obj.foo, obj.baz); // logs '"bar" 17'

这绝对没问题。

但有时,只要有人修改了对象的属性,你就想做某事。在这些情况下,您可以为该属性定义getter或setter函数(使用Object.defineProperty而不是defineGetterdefineSetter):

var obj = { foo: 'bar' };
Object.defineProperty(obj, 'baz', {
  get: function () {
    console.log('Someone wants to read the property "baz"!');
    return 34;
  },
  set: function (value) {
    console.log('You are not allowed to modify the property "baz"!');
  }
});

obj.baz = 17; // doesn't work
console.log(obj.foo, obj.baz); // logs '"bar" 34'

创建new vehicle()时,您可以创建一个新对象,您可以在其上设置或读取属性。你不需要getter和setter。