javascript - 如何从子类调用父类(super class)中的 getter/setter?

标签 javascript

我想从子类 Camera 中的重写 setter 中调用父类(super class) SceneNode 中的 setter“transform”。

这些类看起来像这样:

场景节点:

function SceneNode(){
    this._transform = M4x4.I;
}

SceneNode.prototype.__defineSetter__("transform", 
    function(transform){
        this._transform = transform;
    }       
);

SceneNode.prototype.__defineGetter__("transform", 
    function(){
        return this._transform;
    }   
);

相机:

function Camera(){

}

Camera.prototype = new SceneNode();
Camera.base = SceneNode.prototype;

Camera.prototype.__defineSetter__("transform",
    function(transform){
        Camera.base.transform.call(this, transform);
        this.updateViewMatrix();
    }       
);

Camera.prototype.__defineGetter__("transform", 
    function(){
        return this._transform;
    }   
);

这不起作用,因为“Camera.base.transform”不是根据 firefox 定义的。我曾经调用“Camera.base.setTransform.call(this,transform);”以前,这有效,但自从我了解了 setter 和 getter 后,我尝试摆脱 setXXX 函数。

最佳答案

getter 和 setter 隐藏了底层函数,因此您需要一种方法来绕过属性并直接获取 setter。 (它是未定义的,因为它实际上访问的是 SceneNode.prototype 的 getter 的返回值,而该 getter 没有可以从中获取值的实例。) 与 __defineSetter__ 相对应。是 __lookupSetter__ :

Camera.prototype.__defineSetter__("transform",
    function(transform){
        Camera.base.__lookupSetter__("transform").call(this, transform);
        this.updateViewMatrix();
    }
);

但是这些方法已被弃用,因此正确的(ECMAScript 5)方法是使用 Object.definePropertyObject.getOwnPropertyDescriptor :

Object.defineProperty(Camera.prototype, 'transform', {
    set: function(transform){
        Object.getOwnPropertyDescriptor(Camera.base, 'transform').set.call(this,
                transform);
        this.updateViewMatrix();
    },

    get: function(){
        return this._transform;
    }
});

关于javascript - 如何从子类调用父类(super class)中的 getter/setter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12805777/

相关文章:

javascript - 将动态 IP 分配到 NodeJS 服务器中的域中

Javascript 列表过滤器 - 如何在过滤时删除标题?

javascript - 从控制台调用 Javascript 函数

javascript - 维护JS调试代码并重新加载浏览器

javascript - 猫头鹰图像轮播 - 闪烁的按钮

javascript - Fabric.js loadFromJSON 不适用于 rgba 填充

javascript - 尝试显示存储在本地存储中的数组的值时,对象可能为空错误( typescript )

Javascript:命名捕获组

javascript - 为什么 "true"== true 在 JavaScript 中显示为 false?

javascript - 如何使用 shelljs 使 Node 中的错误超时?