Function.prototype.mybind = function(context) {
// 调用mybind的时候 传递的参数
var outerArg = Array.prototype.slice.call(arguments, 1)
var _this = this;
// 标准浏览器 这里比较难理解
// if ("bind" in Function.prototype) {
// // 传递进来的参数传递过bind, 还需要将bind的this指正
// return this.bind.apply(this,[context].concat(outerArg))
// }
// 兼容化处理
function _fn() {
var innerArg = Array.prototype.slice.call(arguments)
// 将默认传递的参数传递进入
if (innerArg.length==0) {
innerArg.push(window.event);
}
var arg = outerArg.concat(innerArg)
_this.apply(context, arg)
}
return _fn;
}
var obj = {a:1, b:2}
function test(num1, num2) {
console.log(this, num1+num2)
}
var fn = test.mybind(obj, 10)
fn(23)
// 完整版
function bind(callback, context) {
// 考虑传递的参数问题
var ourterArg = Array.prototype.slice.call(arguments, 2)
context = context || window;
function _fn() {
var innerArg = Array.prototype.slice.call(arguments)
console.log(innerArg) // MouseEvent
callback.apply(context, outerArg.concat(innerArg))
}
return _fn;
}
console