Function.prototype.bind(thisArg[, arg1[, arg2[, ...]]]) 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...
1//1.基础性的模拟2Function.prototype._bind =function(ctx) {3if(typeofthis!== 'function') {4thrownewError('Error: The bound object is not a function!');5}67//绑定this指向8const self =this;9//获取绑定时的同步传参数10const [, ...args] =[...arguments];1112returnfunction() {13ret...
注意是Function.prototype.bind(),所以bind是函数上的方法。另外箭头函数无法使用bind,因为箭头函数没有自己的this,arguments等,且箭头函数不能作为构造函数。这是MDN的原话:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#call_apply_and_bind 四、使用场景 例1: functi...
bind、call、apply 的相同点 都是Function原型上的方法 用途都是改变 this 的指向 第一个参数都是新的 this bind、call、apply 的不同点 bind 会返回一个新的函数,目标函数在新函数调用时才会执行 let newFunc = obj.myFn.bind(newObj,'北京','上海'); ...
a.apply(b,[1,2,3]) //输出segmentFault和1,2,3 遇到bind后 : function a() { console.log(this.name); } constb = { name: "segmentFault" } a.bind(b, 1, 2, 3) function a() { console.log(this.name); } const b = {
(function (){ console.log(this.name) })() } } obj.fn() //window 普通函数,由于闭包函数是window执行的,所以this指向window; 箭头函数的this指向函数创建时的作用域。 var name = 'window' var obj = { name:'obj', fn:function(){ (()=>{ //改成箭头函数 ...
call、apply和bind是挂在Function对象上的三个方法,只有函数才有这些方法。 只要是函数就可以,比如:Object.prototype.toString就是个函数,我们经常看到这样的用法:Object.prototype.toString.call(data) 作用: 改变函数执行时的this指向,目前所有关于它们的运用,都是基于这一点来进行的。
functionprintThis(){ console.log(this) } printThis.call(webkaka) // or: printThis.apply(webkaka) 输出 {name: "卡卡网", domainName: "webkaka.com"} 在这种情况下,this实际上成为作为参数传递的对象。 这是call和apply是如何相同的。 x
1. 用js(模拟)实现apply、call、bind 因为它原生是用c++ 接下来外面来实现一下apply、call、bind函数: 注意:我们的实现是练习函数、this、调用关系,不会过度考虑一些边界情况 1.1 实现call 1.1.1 在Function的原型上定义hycall 在Function的原型上添加一个属性hycall,这样通过声明函数或者使用new Function的形式创建...