2016-01-12 48 views
1

我有一个对象,例如:变量/每次被调用时进行评估

var myObject = 
    { 
     data1 : null, 
     data2 : null, 
     value : null, 
    } 

我想value : null被analogus限定于函数时,不同之处在于它将当我返回一个值,例如,拨打console.log(myObject.value),而不是拨打console.log(myObject.value())

这将如何完成?

目标是在拨打myObject.value函数来评估和返回一些东西。例如:

function(){ 
    return this.data1 + "||" + this.data2; 
} 

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

有没有办法做到这一点?

回答

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:

获取语法绑定的对象属性一个函数,当该属性被查找时将被调用。 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 
+0

如果您对吸气剂感兴趣,您可能也对吸气器感兴趣。正如你的直觉告诉你的那样。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set –

4

用getter定义一个属性。

Object.defineProperty(myObject, "value", { 
    get: function() { return this.data + '||' + this.data2; } 
}); 
+0

你摇滚!你知道是否有定义'var myObject = {/ * here * /}'? –

+1

@VladK there,'object = {_i:0,get propertyName(){return this._i ++; }}'检查我的答案,例如 – mjwunderlich