相似於這樣的點擊選中app
Function.prototype.before = function( beforefn ){
var __self = this; // 保存原函數的引用
return function(){ // 返回包含了原函數和新函數的"代理"函數
beforefn.apply( this, arguments ); // 執行新函數,修正 this
return __self.apply( this, arguments ); // 執行原函數
}
};
Function.prototype.after = function( afterfn ){
var __self = this;
return function(){
var ret = __self.apply( this, arguments );
afterfn.apply( this, arguments );
return ret;
}
};
var func = function(){
console.log( 2 );
};
func = func.before(function(){
console.log( 1 );
}).after(function(){
console.log( 3 );
});
func();dom
栗子:函數
學會了固然要會用栗子this
<ul class="recommend"> <li><i class="fa fa-music fa-fw"></i>本地音樂</li> <li><i class="fa fa-download fa-fw"></i>下載管理</li> <li><i class="fa fa-mixcloud fa-fw"></i>個人音樂雲盤</li> <li><i class="fa fa-user-md fa-fw"></i>個人歌手</li> <li><i class="fa fa-ravelry fa-fw"></i>個人電臺</li> </ul>
每次點擊li都要選中添加效果 離開的時候選中效果消失 離開的時候指的是點擊其它li元素prototype
var liDom = document.querySelectorAll('.recommend li'),cashDom = '';
Function.prototype.before = function (beforeFn) { var _self= this; return function () { beforeFn.apply(this,arguments); return _self.apply(this,arguments) }; }; Function.prototype.after = function (afterFn) { var _self= this; return function () { var ret = _self.apply(this,arguments); afterFn.apply(this,arguments); return ret } };
var fn = function (dom) { return funtion(){ dom.classList.add('chooseActive'); cashDom = dom; } }; Array.prototype.slice.apply(liDom).map(function (dom,index) { dom.addEventListener('click',function(){ fn(dom); fn.before(function () { cashDom.classList.remove('chooseActive'); }); }) })