JavaScript中的“嵌套”getter和setter

时间:2011-11-03 11:56:22

标签: javascript nested setter getter

我想使用JS setter和getter来实现类似于这个的语法:

globe.camera.position = Position.create();

这被认为等同于这个表达式:

globe.getCamera().setPosition(Position.create());

我在创建getter / setter的“第一级”时没有问题,.camera部分,如下所示:

function Camera() {

    var x,y,z;

this.__defineGetter__("camera", function() {
        alert("This is the camera getter");
});

    this.__defineSetter__("camera", function(position) {            
        alert("This is the camera setter");
});

}

...

globe=new Camera();
globe.camera=...
c=globe.camera;

...

但我不太确定如何在相机内定义位置吸气剂。我正在尝试这样的事情,但它不会起作用:

function Position() {

    this.__defineGetter__("position", function() {
        alert("This is the position getter");
});

}

globe.camera=new Position();
pos=globe.camera.position;

吸气剂内的警报不会出现。这有什么线索吗?是否有可能实现这种行为?我在Google上搜索过很多但是没能找到合适的搜索条件,而getter / setter的例子往往非常简单。提前谢谢。

1 个答案:

答案 0 :(得分:3)

__defineGetter__和朋友不合标准。

var Camera = Object.create({}, {
  position: {
    get: function () {
      return Position.create();
    },
    set: function (p) {
      this._position = p;
    }
  }
});

Object.defineProperty(globe, "camera", {
  get: function () {
    return Object.create(Camera);
  }
});

您想要使用Object.defineProperty

但是,你为什么要使用getter和setter?他们是邪恶的。除非你做一些聪明的事情,否则你应该真的避开它们。