使用es5语法, 不使用call和apply方法实现 bind polyfill 实现要点 将argments类数组对象参数转成数组对象 将bind函数传入的参数和bind之后函数调用传参连接,以获取执行时所有的参数 如果要绑定的thisArg是 undefined 或 null,则将this指向global全局对象 如果传入的thisArg是基础类型,则显示将其转换成引用类型 如果参数总长度<=3,则建议使用条件分支直接调用,如果参数太多,再使用eval动态执行代码,从而提高性能和安全性 bind返回的函数可以当做构造函数使用,this instanceof ctor可以判断当前函数是否被new关键字调用,如果是,则自己绑定自己 继承原函数的原型链 Function.prototype.bind = function (thisArg) { if (typeof this !== "function") { throw new Error( "Function.prototype.bind - what is trying to be bound is not callable" ); } var toArray = function (args) { var ret = []; for (var i = 0, len = args