<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="./jquery.js"></script>
<script>
// call/apply
/**
* this, fun,documnt; 主要用于封装一些函数/或是对原有函数的封装处理
*
*
*
*/
document.getElementById = (function(func){
return function () {
return func.apply(document,arguments);
}
})(document.getElementById);
var getId = document.getElementById;
/**
* 如果想要链式的调用,关键是对当前函数 this的保留引用.
* 在函数第一次返回的时候,保留了对当前所在函数的引用,
*
*
* @param obj
* @returns {Function}
*/
Function.prototype.bind = function(obj){
var _self = this;
return function(){
return _self.apply(obj,arguments);
}
};
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 fun =function()
{
console.log(2);
};
fun = fun.before(function(){
console.log(1);
}).after(function(){
console.log(3);
});
fun();
var func = function()
{
console.log(this.name);
};
var object = {
name:'demo'
};
func = func.bind(object);
func();
</script>
</head>
<body>
<div id="div">demo</div>
</body>
</html>
<script>
console.log(getId('div'));
</script>