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...
其中call和apply是差不多的,只是传参的形势不同(apply的第二个参数为一个数组或arguments),他们都是直接直接执行函数; 而bind函数将test.sum简化为另一个全局函数sum(b),sum(b)只需要传入一个参数即可。 3、解决js中烦人的this call、apply和bind都可以应用于继承,在这里不再过多赘述,网上有很多这样的例子,参...
· bind是函数上的方法,用来拷贝函数,并对这个副本绑定this。 · bind除了第一个参数用来绑定this外,其余的参数则都会传进原函数的参数中 · bind的返回值为副本函数 六、call和apply 6.1 它两和bind的区别 简单来说,可以理解为call/apply绑定this并调用原函数。 这两和bind非常相似,但区别在于: ·this绑定上:...
call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象,第二个参数差别就来了: call 的参数是直接放进去的,第二第三第 n 个参数全都用逗号分隔,直接放到后面obj.myFun.call(db,'成都', ... ,'string' )。 apply 的所有参数都必须放在一个数组里面传进去obj.myFun.apply(db,['成都', ....
1.apply 这段代码跟 MDN 上的稍有不同 在MDN 中文版讲 bind 的模拟实现时,apply 这里的代码是: self.apply(this instanceof self ? this : context || this, args.concat(bindArgs)) 多了一个关于 context 是否存在的判断,然而这个是错误的!
bind、call、apply 的相同点 都是Function原型上的方法 用途都是改变 this 的指向 第一个参数都是新的 this bind、call、apply 的不同点 bind 会返回一个新的函数,目标函数在新函数调用时才会执行 let newFunc = obj.myFn.bind(newObj,'北京','上海'); ...
在前文,非常详细的介绍了JS里this的上下文对象及用法,知道了this是由其上下文决定的——它是全局的、在对象中、在构造函数或类中、或在 DOM 事件处理程序上,它是隐式引用的。但是,如果使用call、apply或bind方法,你可以明确确定this应该引用什么。 何时使用call、apply或bind?
在js中有一个关键字this用于表示一个对象,这个对象的指向由执行过程决定。在不同的位置,this的指向也不同。在有的时候我们需要改变this指向的对象,可以使用call、apply、bind函数。 2.call、apply、bind函数的使用方法 2.1 call varp={name:a,age:18,getAge:function(){console.log(this.age);}}varp2={name...
call、apply、bind 的作用是改变函数运行时 this 的指向 先搞懂 this,自己初学的时候对 this 是一脸懵逼的 o((⊙﹏⊙))o... this 总结了一下,this 实际上是在函数被调用时发生的绑定,它指向什么地方完全取决于函数在哪里被调用。但这里有个列外,构造函数的 this 和 es6 的箭头函数的 this 又有所不同。