我想在这里变得聪明。假设我写了一个包装其他类的实例的类,重写了一个或两个方法,但是将所有其他方法调用直接传递给了委托对象。
function Wrapper(delegate) {
this._delegate = delegate;
}
Wrapper.prototype.example = function() {
console.log('Doing something in wrapper');
this._delegate.example();
};
如果委托有100个其他方法(夸大,授予),而不是在我的Wrapper中为每个方法定义一个方法,那么在JavaScript中有一种优雅的方法吗?
我考虑过在实际情况下进行方法调整/代理,即
Wrapper.wrap = function(delegate) {
var example = delegate.example;
delegate.example = function() {
example.call(this, arguments);
console.log('Forwarded an overridden method call!');
};
return delegate;
};
但我不想修改实例,如果可以避免的话。
答案 0 :(得分:1)
在javascript中扩展对象的一般方法不是以你完成的方式包装它,而是要求你将每个方法调用转发给实际的对象。因此,除非您有特定的理由被迫这样做,否则只需向现有对象添加新方法和属性就好了。然后,所有现有的方法和属性“只是工作”,而不必做任何特殊的事情。如果要替换某些方法,可以提供自己的实现,但所有以前存在的方法都将继续工作。
假设您有一个名为foo
的现有对象,并且您希望覆盖一个名为create()
的方法。你可以这样做:
foo.origCreate = foo.create;
foo.create = function(x, y) {
// do whatever you want here in the override
// including calling the origCreate method if you want
}