在javascript中访问子对象中的属性

时间:2013-08-08 16:35:09

标签: javascript javascript-objects

我在小提琴中写了一个简单的测试脚本:http://jsfiddle.net/resting/qfCue/

我要做的是将margin属性设置为2,让obj.foptions.labelMarginobj.marginClone接受此值。

我知道可以直接在obj.foptions.labelMarginobj.marginClone更改值。但这不允许我“改变一个地方,改变所有地方”。

相反,obj.foptions.labelMarginobj.marginClone都是undefined 如何将this.margin读为2?

代码:

var obj= {
    margin: 10,
    setMargin: function(val) { this.margin = val; },
    foptions: { labelMargin: this.margin },
    marginClone: this.margin
}

obj.setMargin(2);
console.dir(obj.foptions);
console.log(obj.marginClone);
console.log(obj.margin);

1 个答案:

答案 0 :(得分:0)

在JavaScript中执行此操作的典型方法是使用函数创建保存状态的作用域。以下是您的代码在该样式中重写的内容:

function obj()
{
    var that = this;

    that.margin = 10;
    that.setMargin = function(val) { 
        that.margin = val; 
    };
    that.foptions = { 
        labelMargin: that.margin 
    };
    that.marginClone = that.margin;
}

var inst = new obj();
inst.setMargin(2);
console.dir(inst.foptions);
console.log(inst.marginClone);
console.log(inst.margin);

See it on JSFiddle

关于marginClone,请回想一下JavaScript只对对象类型有引用语义 - 因此对于标量值,您将始终进行复制。如果希望将标量传递给对象,则可以将标量包装在对象中。