每次调用时定义/评估的变量

时间:2016-01-12 03:11:05

标签: javascript

我有一个对象,例如:

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;
 }

目的是能够将此元素的值视为静态变量;但是,因为对象的值取决于可能改变的两个属性,所以每次调用它时都应该重新评估该值。

有办法做到这一点吗?

2 个答案:

答案 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