是的,不过知识稍微扩展下,我们引入另一个知识点:职责链模式
什么是职责链模式?
我们上班的时候经常遇到高峰期,那么搭公交的时候会把硬币传递给前面的人,然后人传人一层一层的传递下去直到放到投币箱或者售票员
这种投递的优点就是请求发送者只需要知道链中的第一个节点,从而弱化了发送者和一组接收者之间的强联系。如果不使用职责链模式,那么在公交车上,我就得先搞清楚谁是售票员,才能把硬币递给他。
我们在vue中创建的组件可以当做是职责链的一环,每个组件都有自己的职责,然后在全局初始化的时候,组件成了系统的一部分,执行的先后在这里其实取决于代码执行的先后,而真正的职责连是怎么样的呢?
对于程序员来说,我们总是喜欢去改动那些相对容易改动的地方,就像改动框架的配置文件远比改动框架的源代码简单得多
让我们来看看AOP编程:
Function.prototype.before = function( beforefn ){
var __self = this; // 保存原函数的引用
return function(){ // 返回包含了原函数和新函数的"代理"函数
beforefn.apply( this, arguments ); // 执行新函数,且保证this不被劫持,新函数接受的参数
// 也会被原封不动地传入原函数,新函数在原函数之前执行
return __self.apply( this, arguments ); // 执行原函数并返回原函数的执行结果,
// 并且保证this不被劫持
}
}
Function.prototype.after = function( afterfn ){
var __self = this;
return function(){
var ret = __self.apply( this, arguments );
afterfn.apply( this, arguments );
return ret;
}
};
用AOP装饰函数的技巧在实际开发中非常有用。不论是业务代码的编写,还是在框架层面,我们都可以把行为依照职责分成粒度更细的函数,随后通过装饰把它们合并到一起,这有助于我们编写一个松耦合和高复用性的系统。
说了一些扩展的知识点希望对你有帮助