我正在使用mootools 1.4.3进行基本类继承。我实际上是从一个不同的类库转换一些代码。这个其他类库将根据预定义的函数名模板动态创建getter和setter(成员函数_ get _xxx将产生xxx的getter)。我想用mootools做类似的事情。我不是Javascript的新手,但我对更高级的概念有点不熟悉。
我已经让它部分工作了。在定义Class对象的代码中,我遍历classes参数并相应地添加 defineGetter 或 defineSetter 。
这很好用,它可以正确地创建getter和setter。它失败的地方是我创建一个子类。这些动态getter / setter不会传播到子类。我不确定这是否可能,如果是这样,它是如何完成的。使用上面对mootools Class和这些类的更改:
在foo的日志中,我可以看到bar的getter和setter。在baz的日志中,我可以看到quux的getter和setter,但我也希望看到来自父级的getter和setter。再说一次,如果我能让它工作,它将为我节省大量时间来转换这段代码。
答案 0 :(得分:0)
右。我想我得到了你想要做的但是......
不推荐使用 __defineGetter__
和__defineSetter__
,而不是跨浏览器:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/DefineSetter
当您扩展对象时,保护和代理对这些属性的直接访问将不起作用,因为setter / getter(访问新对象上的属性)将不会转到您正在侦听的父(原型对象)。
您可以尝试查看Extends
参数。当您设置新类时,从新的params对象中查找原型链中一直存在的函数,如果找到匹配项,则应将setter / getter应用于新对象。这不是那么容易......
我会说,可能在newClass.prototype.parent = parent;
之后你应该能够检查是否有可用的getter / setter并附上你的听众。你可能想以某种方式保存引用,除非你想在此时检查所有的类属性。
或者,你可以重构初始化类mutator w / o进入类型创建并在那里附加你的东西 - 尽管原始对象可能不可用。