我有一个对象,例如:
var myObject =
{
data1 : null,
data2 : null,
value : null,
}
我希望将value : null
定义为与函数类似,但它会在i时返回一个值,例如调用console.log(myObject.value)
,而不是调用console.log(myObject.value())
。< / p>
如何做到这一点?
目标是在调用myObject.value
时,评估和返回某些内容的函数。例如:
function(){
return this.data1 + "||" + this.data2;
}
目的是能够将此元素的值视为静态变量;但是,因为对象的值取决于可能改变的两个属性,所以每次调用它时都应该重新评估该值。
有办法做到这一点吗?
答案 0 :(得分:4)
使用getter定义属性。
Object.defineProperty(myObject, "value", {
get: function() { return this.data + '||' + this.data2; }
});
答案 1 :(得分:2)
JavaScript getter属性作为普通属性进行访问,但每次访问时都会将其评估为函数。
以下是两种定义它们的方法:
使用get
关键字:
var myObject = {
data1: 0,
data2: 1,
get value() {
return this.data1 + '||' + this.data2;
}
};
console.log( myObject.value ); // prints '0||1' to console
来自developer.mozilla.org:
get语法将对象属性绑定到将在查找该属性时调用的函数。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get
使用defineProperty()
:
var myObject = {
data1: 0,
data2: 1,
};
Object.defineProperty(myObject, "value", {
get: function() { return this.data + '||' + this.data2; }
});
console.log( myObject.value ); // prints '0||1' to console