前端怎么传_javascript前端经典面试题bind实现原理

本文详细解析JavaScript中bind方法的实现原理,包括bind如何改变函数内部的this指向、返回新函数以及处理传入参数。通过阅读,你将能自己编写bind函数,提升面试技巧,助力前端技术成长。
摘要由CSDN通过智能技术生成

面对面试环节bind实现已经变成不可缺少的一道风景了,那么从几个角度来了解下bind的一切吧!

一、bind一共做了三件事情

  1. bind改变了函数当中this的指向
  2. 返回一个新函数
  3. 执行函数,传入参数
var fn = function(arg1) {  this.age = arg1;  return this;}var obj = {name: 'haha'}// 1. 把fn里面的this指向到obj,也就是说fn里面的this就是obj// 2. 返回一个新的函数var fnRes = fn.bind(obj)// 3.执行返回来的函数,带入参, 返回return的结果fnRes(3)
a567c638b21672e65f20e0cbe77af6f2.png

二、那么一步步来实现下bind的函数吧

  1. 扩展原型上的方法
Function.prototype.myBind = function() {}
  1. 执行myBind返回一个函数
Function.prototype.myBind = function() {  // 返回一个函数return function() {    }}
  1. 改变this指向
Function.prototype.myBind = function(targetObj) {  var originObj = this;  // 都知道原型方法里面的this都指的是实例,这里我们改变下到我们指定的对象上  return function() {    // 把原来的this改变成来targetObj  originObj.apply(targetObj)  }}
  1. 函数参数处理
Function.prototype.myBind = function(targetObj) {  var originObj = this;  // 都知道原型方法里面的this都指的是实例,这里我们改变下到我们指定的对象上  return function() {    // 获取参数    var args = arguments;    // 把原来的this改变成来targetObj  originObj.apply(targetObj, arguments)  }}
  1. 如果想扩展bind里面传多个参数,那么我们怎么处理呢
Function.prototype.myBind = function(targetObj) {  var originObj = this;  var args = [].slice.call(arguments, 1)  // 都知道原型方法里面的this都指的是实例,这里我们改变下到我们指定的对象上  return function() {    // 获取参数和整合参数    args = Object.assign(args, arguments)    // 把原来的this改变成来targetObj  originObj.apply(targetObj, args)  }}

看完这篇文章,你不仅知道怎样使用bind,也可以写出自己的bind,顺顺利利通过面试。在这里祝大家前端技术之路一路上升!

分享前端bind实现原理面试题结束来!觉得对你有帮助记得➕关注啊!更多面试题原理陆续到来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值