bind() 方法与 apply 和 call 很相似,也是可以改变函数体内this的指向。 MDN开发文档规定: MDN的解释是:bind()方法会创建一个新函数,称为绑定函数,当调用这个绑定函数时,绑定函数会以创建它时传入 bind()方法的第一个参数作为this, 传入bind() 方法的第二个以及以后的参数加上绑定函数运行时本身
下面是bind方法的代码实现:Function.prototype.myBind = function(obj, ...args1) {// 缓存调用bind的函数const self = this;// 嵌套一层函数,返回函数调用apply方法的结果// 此处也可以补充传参return function(...args2) {return self.apply(obj, [...args1, ...args2]);}}在上述实现中,使用了re...
} .bind(this) } }; (new T()).init(); 结果: 通过①和②的对照加上显示的结果就会看出bind的作用:改变了上下文的this bind与call很相似,,例如,可接受的参数都分为两部分,且第一个参数都是作为执行时函数上下文中的this的对象。 不同点有两个: ①bind的返回值是函数 //都是将obj作为上下文的this fun...
call 的参数是直接放进去的,第二第三第 n 个参数全都用逗号分隔,直接放到后面obj.myFun.call(db,'成都', ... ,'string' )。 apply 的所有参数都必须放在一个数组里面传进去obj.myFun.apply(db,['成都', ..., 'string' ])。 bind 除了返回是函数以外,它 的参数和 call 一样。 当然,三者的参数不限...
bind、call、apply 的相同点 都是Function原型上的方法 用途都是改变 this 的指向 第一个参数都是新的 this bind、call、apply 的不同点 bind 会返回一个新的函数,目标函数在新函数调用时才会执行 let newFunc = obj.myFn.bind(newObj,'北京','上海'); ...
通过call,apply,bind 这三兄弟可以改变introduce中 this 的指向。 call constmyFriend={name:'dongdong',age:21,};console.log(person.introduce.call(myFriend));// => Hello everyone! My name is dongdong. I'm 21 years old. 通过上面代码我们可以看出introduce这个函数中的 this 指向被改成了 ...
■ call、apply、bind 的区别分别是什么? 三者异同 相同点: 三者都是用来改变函数的上下文,也就是this指向的。 不同点: fn.call:立即调用,返回函数执行结果,this指向第一个参数,后面可有多个参数,并且这些都是fn函数的参数。】 fn.call(this参数,形参1,形参2...) ...
在前文,非常详细的介绍了JS里this的上下文对象及用法,知道了this是由其上下文决定的——它是全局的、在对象中、在构造函数或类中、或在 DOM 事件处理程序上,它是隐式引用的。但是,如果使用call、apply或bind方法,你可以明确确定this应该引用什么。 何时使用call、apply或bind?
bind和call、apply最大的区别是:bind不会调用 bind 支持传递函数,有两个位置可以传递 ①在bind的同时,以参数列表的形式进行传递; ②在调用的时候,以参数列表的形式进行传递。 当传递参数时,bind的时候传递的参数和调用的时候传递的参数会合并到一起,传递到函数内部 ...
myBind = function(context) { if(typeof this !== 'function') { throw new Error(`${this} is not a function}` } context = context || window; context.fn = this; // 获取参数 let args = [...arguments].slice(1); return () => { return context.fn.apply(context, [...args]) }...