【发布时间】:2012-07-09 11:22:49
【问题描述】:
作为一个显着简化的场景,假设我有 2 个 Javascript 对象定义如下:
var ClassA = Class.extend({
'say': function(message) {
console.log(message);
}
... // some more methods ...
});
var ClassB = Class.extend({
init: function(obj) {
this._target = obj;
}
});
我想在 Javascript 中有某种机制可以使我们能够做到以下技巧:
var b = new ClassB( new ClassA() );
b.say("hello");
我想找到一种方法来检测是否有一个方法调用ClassB,并且该方法在ClassB中没有定义,那么我可以自动将方法调用转发到ClassA上,这是ClassB中的成员变量。
在实际场景中,ClassA 是一个作为 brwoser 插件实现的对象,并使用 <object> 标签插入到网页中。它的方法是用 C++ 代码实现的,所以我无法从它的原型中分辨出它的方法,并事先将其插入到ClassB 的原型中。
我想使用该技术来创建一个原生 Javascript 对象,该对象具有 ClassA 界面的窄化版本。有什么办法可以做到吗?
【问题讨论】:
-
听起来您实际上希望 ClassB 继承 ClassA 的功能。反正
Class.extend({})没有原生JS机制,你用的是什么框架? -
@pixelistik 我相信他在
Object中添加了一个扩展方法。 -
@pixelistik 在项目中我使用的是 JS.Class (jsclass.jcoglan.com),而在这个示例中我使用的是 John Resig 的简单继承 (ejohn.org/blog/simple-javascript-inheritance)。不过应该没有太大区别。
标签: javascript