Javascript 我能告诉泛型getter/setter在其主体中应用于什么属性吗?

Javascript 我能告诉泛型getter/setter在其主体中应用于什么属性吗?,javascript,getter-setter,Javascript,Getter Setter,上下文(this)自然是请求属性的对象,但没有传递给getter函数的参数。我希望能够在不使用闭包的情况下获得所请求属性的名称,但看起来这是唯一的方法 Object.defineProperty( someObj, "prop1", { get: genericGetter } ); Object.defineProperty( someObj, "prop2", { get: genericGetter } ); function genericGetter() { // i wan

上下文(
this
)自然是请求属性的对象,但没有传递给getter函数的参数。我希望能够在不使用闭包的情况下获得所请求属性的名称,但看起来这是唯一的方法

Object.defineProperty( someObj, "prop1", { get: genericGetter } );
Object.defineProperty( someObj, "prop2", { get: genericGetter } );

function genericGetter() {
    // i want to figure out whether this is called on prop1 or prop2
}
我能告诉泛型getter/setter在其 身体

这不是getter的工作方式。对象的属性可以具有
获取
函数。如果属性具有
,则读取属性:

var x = obj.prop;
返回
。但是,如果属性具有
get
函数,则读取该属性将触发该函数。因此,如果必须动态计算某个属性的值,或者希望在读取该属性时执行某些操作,则可以使用getter

例如,
.innerHTML
需要一个getter,因为它的值不是静态存储的,而是在访问时计算的:

var html = div.innerHTML;
在这里,浏览器必须序列化
div
元素中包含的DOM结构

因此,如果您想要一个
.get()
函数来检索各种属性(Backbone.js有这样一个函数),那么您不需要寻找getter

您想要的最简单的实现是:

someObj.getProp = function ( name ) {
    // perform required tasks
    return this[ name ];
};

你能提供一些代码来解释你想做什么吗?我不明白你的意思。似乎您希望得到一个类似PHP的“get magic”方法?非常确定getter完全不知道请求的属性名。@Rocket:他们可以通过
this
上下文访问父对象实例(及其所有成员),这应该足以让他们做一些有意义的工作。@Rocket,我想你不知道。规范说明:。因此,getter接收到一个对所有者对象的引用(通过
this
),而不是被访问的实际属性名。但是,没有真正的理由说明JavaScript不能(或不应该)以某种方式向getter提供属性名。更好的方法是在对象上附加捕获所有侦听器。当那一天到来时,我会很高兴的。@chaiguy这样一个通用的属性访问处理程序确实是一个有趣的功能。@chaiguy实际上,现在我想起来了,这样的功能将以Nice的形式与下一版本的ECMAScript一起发布!!你让我今天过得很愉快,西姆。:)