var _delegate = {
foo: function () {
alert('_delegate.foo');
}
};
var agregate = {
delegate: _delegate,
foo: function () {
return this.delegate.foo.call(this);
}
};
agregate.foo(); // delegate.foo
agregate.delegate = {
foo: function () {
alert('foo from new delegate');
}
};
agregate.foo(); // foo from new delegate
这种对象关系称为“has-a”,而集成是“is-a“的关系。
由于显示组合的缺乏(与继承相比的灵活性),增加中间代码也是可以的。
AOP特性
作为面向方面的一个功能,可以使用function decorators。ECMA-262-3规格没有明确定义的“function decorators”的概念(和Python相对,这个词是在Python官方定义了)。 不过,拥有函数式参数的函数在某些方面是可以装饰和激活的(通过应用所谓的建议):
最简单的装饰者例子:
复制代码 代码如下:
function checkDecorator(originalFunction) {
return function () {
if (fooBar != 'test') {
alert('wrong parameter');
return false;
}
return originalFunction();
};
}
function test() {
alert('test function');
}
var testWithCheck = checkDecorator(test);
var fooBar = false;
test(); // 'test function'
testWithCheck(); // 'wrong parameter'
fooBar = 'test';
test(); // 'test function'
testWithCheck(); // 'test function'
结论
在这篇文章,我们理清了OOP的概论(我希望这些资料已经对你有用了),下一章节我们将继续面向对象编程之ECMAScript的实现 。