我想使用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的例子往往非常简单。提前谢谢。
答案 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);
}
});
但是,你为什么要使用getter和setter?他们是邪恶的。除非你做一些聪明的事情,否则你应该真的避开它们。