1.最简单的实现
function test(obj){
console.log('before');
obj.test();
console.log('after');
}
obj={
test:function(){
console.log('need run code');
}
}
test(obj);
运行结果:
before
need run code
after
2.复杂实现:
function test(){
console.log('need run code!');
}
Function.prototype.before = function(fn){
/**_self(this)代表的是
function(){
console.log('before')
}对象
**/
var _self=this;
return function(){
//this 代表的是window对象,下面是利用window对象执行before函数
fn.apply(this,arguments);
//自己调用自己的函数
_self.apply(_self,arguments);
}
};
Function.prototype.after = function(fn){
var _self=this;
return function(){
_self.apply(_self,arguments);
fn.apply(this,arguments);
}
};
test.before(function(){
console.log('before')
}).after(function(){
console.log('after')
})()
运行结果:
before
need run code
after
/**
上面代码的解释:
test.after(function(){
console.log('after')
})
return value is :
function(){
//this 代表的是window对象,下面是利用window对象执行before函数
fn.apply(this,arguments);
//自己调用自己的函数
_self.apply(_self,arguments);
}
上面的返回接着调用
.before(function(){
console.log('before')
})
return value is:
function(){
_self.apply(_self,arguments);
fn.apply(this,arguments);
}
最后的()代表执行最终返回的函数
**/