题解 | #Function.bind#
Function.bind
https://www.nowcoder.com/practice/ecad0164931847f78c55278cee56e544
首先我们了解一下 bind 方法的原理:
Function.bin()
在 JavaScript 中,函数的 bind
方法是用于创建一个新函数,并且指定这个新函数中的 this
值,同时可以预先传入部分参数。
语法
function.bind(thisArg, arg1, arg2, ...)
参数说明
thisArg
: 在新函数运行时被指定的this
值。arg1, arg2, ...
: 预先传入到新函数的参数列表。
返回值
bind
方法返回一个新的函数,这个函数与调用 bind
方法的原始函数相同,但有以下特性:
this
值被永久设置为bind
方法的第一个参数。- 当新函数被调用时,提供的参数会按照
bind
方法传递的参数列表顺序,加在新函数调用时的参数列表之前。
示例
let person = { firstName: 'John', lastName: 'Doe', say: function() { console.log('Hello, ' + this.firstName + ' ' + this.lastName); } }; // 创建一个新函数 boundSay,它的 this 永久指向 person let boundSay = person.say.bind(person); boundSay(); // 输出: Hello, John Doe // 创建一个新函数 boundGreet,它的 this 永久指向 person,并预先传入参数 function greet(greeting) { console.log(greeting + ', ' + this.firstName + ' ' + this.lastName); } let boundGreet = greet.bind(person, 'Hi'); boundGreet(); // 输出: Hi, John Doe
应用场景
- 固定函数的上下文: 当需要确保函数在调用时的
this
值始终指向特定对象时,可以使用bind
方法。 - 部分应用参数: 可以预先传递一部分参数,使得函数在调用时只需提供剩余的参数。
- 事件处理程序: 在事件监听中,经常使用
bind
来确保事件处理函数中的this
指向正确的对象。
总结来说,bind
方法是 JavaScript 中用于永久设置函数的 this
值,并且可以预先传递参数的重要工具。
题解
首先让 originalFunc 保存原始函数的引用,然后返回一个新的函数,这个函数会在调用时将绑定的 this 值和参数传递给原始函数,最后使用使用 apply 方法调用原始函数,设置 thisArg 为绑定的 this 值,参数为 args 和 innerArgs 的合并数组。
Function.prototype._bind = function(target, ...arguments1) { const originalFunc = this return function (...args){ return originalFunc.apply(target,arguments1.concat(args)) } }
apply函数:
在 JavaScript 中,apply
是 Function
原型上的一个方法,用于调用一个函数,并且可以设置函数体内 this
对象的值,并传递一个数组(或类数组对象)作为函数的参数。
语法
func.apply(thisArg, [argsArray])
参数说明
thisArg
: 可选参数,函数执行时的this
值。如果thisArg
是null
或undefined
,则在调用的函数里使用全局对象(在浏览器中是window
)。argsArray
: 一个数组或者类数组对象,其中的元素作为参数传递给调用的函数。如果argsArray
是null
或undefined
,则不传入任何参数。
返回值
调用函数的返回值,如果使用 new
调用构造函数,则返回新对象的实例。
手撕题题库 文章被收录于专栏
这是我开卷的第一步!!