深入理解JavaScript系列(17):面向对象编程之概(7)


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的实现 。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wgfgws.html