function Archiver() {
var temperature = null;
var archive = [];
Object.defineProperty(this, 'temperature', {
get: function() {
console.log('get!');
return temperature;
},
set: function(value) {
temperature = value;
archive.push({ val: temperature });
}
});
this.getArchive = function() { return archive; };
}
var arc = new Archiver();
arc.temperature; // 'get!'
arc.temperature = 11;
arc.temperature = 13;
arc.getArchive(); // [{ val: 11 }, { val: 13 }]
有大神解释下这4个输出是怎么来的吗?
请输入代码
这里用到了数据的访问器属性,可以百度一下,这里我简单说一下你这块代码的原理。
首先我们定义了一个构造函数,里边的this指向的是构造函数的实例。
之后,将实例的属性设置为访问器属性。这样,获取这个属性的值时,会自动调用get方法,当给这个属性设置值时,会自动调用set方法。这就是访问器属性的作用。
接下来说后边的结果,创建构造函数的实例后,第一个属于获取属性的值,就会调用get,第二个和第三个是设置属性的值,就会调用set。
前边说到,this指向实例,所以实例有一个数组,两次set都会往这个数组中push值,所以最后一个才会有一个数组,数组中的值就是两次set中的值。