首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript defineProperty

Javascript defineProperty
EN

Stack Overflow用户
提问于 2015-07-26 02:05:42
回答 1查看 165关注 0票数 0

使用时:

代码语言:javascript
复制
Object.defineProperty(obj,prop,desc){
    get: function(){...
    set: function(){...
}

getter/setter是应用于obj[prop],还是无论指定什么属性都对obj起作用?

我之所以问这个问题,是因为我试图基于一个嵌套对象设置一些数据绑定,例如:

代码语言:javascript
复制
obj[propA] = {propB:'seomthing',propC:'somethingElse'}

当我做这样的事:

代码语言:javascript
复制
var obj = {value:{propA:'testA',propB:'testB'}};

Object.defineProperty(obj.value,'propA',{
    get: function(){return this.value;},
    set: function(newValue){this.value=newValue;console.log('propA: ',newValue);}
});

console.log(obj.value.propA);

obj.value.propA = 'testA';

Object.defineProperty(obj.value,'propB',{
    get: function(){return this.value;},
    set: function(newValue){this.value=newValue;console.log('propB: ',newValue);}
});

console.log(obj.value.propB);

obj.value.propB = 'testB';

console.log('propA: ',obj.value.propA,' --propB: ',obj.value.propB);

getter为对象中defineProperty设置的所有属性分配值。

如果这是正确的功能,那么是否有一种方法可以让getter/setter只在定义的属性上工作,以便在上面的小提琴中,propA会产生testA,propB会产生testB?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-26 02:09:32

getter和setter只应用于指定的属性,但每个属性中的this引用其属性的对象(您不必为每个属性都有一个支持变量)。

在您的示例中,您总是在读取和修改obj.value.value。您可以为每个变量创建一个不同的变量,例如:

代码语言:javascript
复制
(function () {
    var value;

    Object.defineProperty(obj.value, 'propA', {
        get: function () { return value; },
        set: function (newValue) { value = newValue; },
    });
})();

更新小提琴

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31632952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档