首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

说下jsbind

bind受体是对象,返回是个新函数。 我们知道this总是指向调用他对象。但是有时候我们希望‘固化’这个this。 也就是无论怎么调用这个返回函数都有同样this值。...这就是bind作用。 语法 fun.bind(thisArg[, arg1[, arg2[, ...]]]) 参数 thisArg 当绑定函数被调用时,该参数会作为原函数运行时 this 指向。...this将永久地被绑定到了bind第一个参数,无论这个函数是如何被调用。 arg1, arg2, ... 当绑定函数被调用时,这些参数将置于实参之前传递给被绑定方法。...func2 = sayColor.bind(this); // 输出 "red", 因为传是this,在全局作用域中this代表 window。...func2(); 例2 注意:bind只生效一次 function f(){ return this.a; } //this被固定到了传入对象上 var g = f.bind({a:"azerty

2.2K10
您找到你想要的搜索结果了吗?
是的
没有找到

JS 手写: call、apply、bind

方法语法和作用与 apply() 方法类似,只有一个区别,就是 call() 方法接受是一个参数列表,而 apply() 方法接受是一个包含多个参数数组。...# 描述 call() 允许为不同对象分配和调用属于一个对象函数/方法。 call() 提供新 this 值给当前调用函数/方法。...call() 方法作用和 apply() 方法类似,区别就是 call() 方法接受是参数列表,而 apply() 方法接受是一个参数数组。...# Try it bind() 方法创建一个新函数,在 bind() 被调用时,这个新函数 this 被指定为 bind() 第一个参数,而其余参数将作为新函数参数,供调用时使用。...# 描述 bind() 函数会创建一个新绑定函数(bound function,BF)。

1.5K30

JS中call apply bind用法

谁调用当前属性或者方法,它就是谁 /* 2.1.bind方法作用 修改函数或者方法this为指定对象, 并且会返回一个修改之后新函数给我们 注意点...: bind方法除了可以修改this以外, 还可以传递参数, 只不过参数必须写在this对象后面 */ //call apply bind修改this.../*call:修改函数或者方法this为指定对象, 并且会立即调用修改之后函数 注意点: call方法除了可以修改this以外, 还可以传递参数, */.../*apply:修改函数或者方法this为指定对象, 并且会立即调用修改之后函数 注意点: apply方法除了可以修改this以外, 还可以传递参数, 只不过参数必须通过数组方式传递...console.log(this); } test(10,20); window.test(); let fn=test.bind

2.9K30

面试官问:能否模拟实现JSbind方法(高频考点)

前言 这是面试官问系列第二篇,旨在帮助读者提升JS基础知识,包含new、call、apply、this、继承相关知识。 面试官问系列文章如下:感兴趣读者可以点击阅读。...1.面试官问:能否模拟实现JSnew操作符 2.面试官问:能否模拟实现JSbind方法(本文) 3.面试官问:能否模拟实现JScall和apply方法 4.面试官问:JSthis指向 5.面试官问...:JS继承 用过React同学都知道,经常会使用bind来绑定this。...2、传给bind()其他参数接收处理了,bind()之后返回函数参数也接收处理了,也就是说合并处理了。 3、并且bind()后name为bound + 空格 + 调用bind函数名。...original原函数this指向就是这个新对象。另外前不久写过一篇文章:面试官问:能否模拟实现JSnew操作符。简单摘要:new做了什么: 1.创建了一个全新对象。

48820

手写JS函数call、apply、bind

之所以要写这篇,是因为曾经面试被要求在白纸上手写bind实现  结果跟代码一样清晰明确,一阵懵逼,没写出来!  下面,撸起袖子就是干!~  把call、apply、bind一条龙都整一遍!...context : window) // 防止覆盖掉原有属性 const key = Symbol() // 这里this为需要执行方法 context[key] = this // 方法执行...context : window) // 防止覆盖掉原有属性 const key = Symbol() // 这里this为需要执行方法 context[key] = this // 方法执行...fun.ownApply(_this, [1, 2])// 输出:YIYING3参考:前端手写面试题详细解答bind定义与使用Function.prototype.bind(): developer.mozilla.org...(arg1 + arg2)}const _this = { name: 'YIYING' }// 只变更fun中this指向,返回新function对象const newFun = fun.bind(

1.2K20

手写JS函数call、apply、bind

之所以要写这篇,是因为曾经面试被要求在白纸上手写bind实现  结果跟代码一样清晰明确,一阵懵逼,没写出来!  下面,撸起袖子就是干!~  把call、apply、bind一条龙都整一遍!...context : window) // 防止覆盖掉原有属性 const key = Symbol() // 这里this为需要执行方法 context[key] = this // 方法执行...context : window) // 防止覆盖掉原有属性 const key = Symbol() // 这里this为需要执行方法 context[key] = this // 方法执行...fun.ownApply(_this, [1, 2])// 输出:YIYING3bind定义与使用Function.prototype.bind(): developer.mozilla.org/zh-CN...arg1 + arg2)}const _this = { name: 'YIYING' }// 只变更fun中this指向,返回新function对象const newFun = fun.bind(_

1K30

JSbind、apply、call理解

概要 call、apply、bind 都是用来修改函数中this, 传参时,call是一个个传参,apply是数组形式传参,call和apply立即执行并且返回值是你调用方法返回值,若该方法没有返回值...bind是改变this后返回一个新函数,他不会立即执行。 这三个方法不会改变原方法this指向。 Bind 复制原方法传入新this指向后生成新方法,参数可传多个。...(b)("小刚"); 显示 小明和小刚一块玩 小红和小刚一块玩 Call 调用原方法传入新this指向,第一个参数为this指向对象,后面可传多个参数。...name: "小红" }; a.play("小刚", "小李"); a.play.call(b, "小刚", "小李"); 显示 小明和小刚、小李一块玩 小红和小刚、小李一块玩 Apply 调用原方法传入新...是Function.prototype下方法,作用是执行一下目标函数,执行时顺便把目标函数中this改一下,然后把结果输出,执行后,不会影响原函数中this!

92610

什么是bind()方法

在 JavaScript 中,bind() 方法是函数对象一个内置方法,用于创建一个新函数,并将其绑定到指定对象作为该函数上下文(即 this 值)。...绑定后函数可以在后续调用时保持绑定上下文不变。 bind() 方法语法如下: function.bind(thisArg[, arg1[, arg2[, ...]]])...bind() 方法返回一个新绑定函数,它与原始函数具有相同函数体和作用域,但具有固定上下文。...bind() 方法还可以用于预设函数参数。通过在 bind() 方法第二个参数开始传递参数,可以固定部分或全部参数值,而不影响绑定后函数上下文。.../ 输出:8 使用 bind() 方法将 add() 函数绑定到 null 上下文,并预设了第一个参数为 5。

20050

jsthis、call、apply、bind、继承、原型链

本文来自我github 0.前言 这些都是js基础进阶必备了,有时候可能一下子想不起来是什么,时不时就回头看看基础,增强硬实力。...= 1 } var f = new F() call、apply、bind 指向传入函数第一个参数。...则这个this指向b 对象方法 对象内部方法指向对象本身 var obj = { value: 5, printThis:...} } 此外,需要注意,一个函数被bind后,以后无论怎么用call、apply、bind,this指向都不会变,都是第一次bind上下文 3.从call到继承 首先,js没有严格意义上子类父类...因为都有各自缺陷,所以就有一种组合继承,将构造函数继承和prototype继承混合起来,方法写在父类prototype上,是比较常见方法

89110

js call()、apply()、bind()用法和区别

特性: fun.call(thisArg,arg1,arg2,…) 会立即调用fun函数; call 方法将一个函数对象上下文从初始上下文改变为由 thisArg 指定新对象,如果没有提供 thisArg...特性: fun.apply(thisArg,[arg1,arg2,…]) 会立即调用fun函数; apply方法将一个函数对象上下文从初始上下文改变为由 thisArg 指定新对象,如果没有提供...特性: fun.bind(thisArg,arg1,arg2,…) 不会立即调用fun函数,会返回一个新指定了this函数; bind方法将一个函数对象上下文从初始上下文改变为由 thisArg...(obj, 1, 2); // 返回是一个新指定了this函数 newFun(); // 3 4. call()、apply()和bind()应用 1. call() call 常用来继承,因为...() 如果我们想改变某个函数内部this指向,但又不需要立即调用该函数,此时用bind: 点击 let

1.1K30

js中call、apply、bind那些事

前言 回想起之前一些面试,几乎每次都会问到一个js中关于call、apply、bind问题,比如… 怎么利用call、apply来求一个数组中最大或者最小值 如何利用call、apply来做继承 apply...、call、bind区别和主要应用场景 虽然网上有很多关于这方面的博客和文章,但还是决定写一篇自己对这方面知识理解。...所以其实他们干的事从本质上讲都是一样动态改变this上下文,但是多少还是有一些差别的.. call、apply与bind差别 call和apply改变了函数this上下文后便执行该函数,而bind...我们可以利用call、apply来将其转化为真正数组这样便可以方便地使用数组方法了。...length属性 ) 数组追加 在js中要往数组中添加元素,可以直接用push方法, 1234567 var arr1 = [1,2,3];var arr2 = [4,5,6];[].push.apply

1.7K50

js中call、apply、bind那些事

前言 回想起之前一些面试,几乎每次都会问到一个js中关于call、apply、bind问题,比如… 怎么利用call、apply来求一个数组中最大或者最小值 如何利用call、apply来做继承 apply...所以其实他们干的事从本质上讲都是一样动态改变this上下文,但是多少还是有一些差别的.. call、apply与bind差别 call和apply改变了函数this上下文后便执行该函数,而bind...call、apply、bind常见应用场景。...我们可以利用call、apply来将其转化为真正数组这样便可以方便地使用数组方法了。...length属性 ) 数组追加 在js中要往数组中添加元素,可以直接用push方法, var arr1 = [1,2,3]; var arr2 = [4,5,6]; [].push.apply

1.6K60

js基础-关于call,apply,bind一切

函数原型链中 apply,call 和 bind 方法是 JavaScript 中相当重要概念,与 this 关键字密切相关,相当一部分人对它们理解还是比较浅显,所谓js基础扎实,绕不开这些基础常用...目录 call,apply,bind基本介绍 call/apply/bind核心理念:借用方法 call和apply应用场景 bind应用场景 中高级面试题:手写call/apply、bind...调用call/apply/bind必须是个函数 call、apply和bind是挂在Function对象上三个方法,只有函数才有这些方法。...当然是借用 A 对象方法啦,既达到了目的,又节省了内存。 这就是call/apply/bind核心理念:借用方法。 借助已实现方法,改变方法中数据this指向,减少重复代码,节省内存。...关于js事件循环机制不理解同学,可以看我这篇博客:Js 事件循环(Event Loop)机制以及实例讲解 那么如何使他输出: 1,2,3,4,5呢?

1.4K21

手写实现 jsbind,并实现 softBind

// bind会返回一个硬绑定新函数,新函数会使用指定第一个thisCtx去调用原始函数,并将其它参数传给原始函数。...硬绑定会降低函数灵活性,在绑定之后不能通过显式或硬绑定方式改变this,只能通过new改变 // softBind 会对指定函数进行封装,首先检查调用时 this,如果 this 绑定到全局对象或者...(); // 3,10 let fb66 = fb22.myBind({ a: 6 }, 10)(); // 2,10 // fb66(); // 2,10 // 结论:bind方法链式调用,都以第一次...bind绑定为准,所以叫硬绑定,原理为 下一次 调用bind方法为上一个bind方法返回闭包,已经将 context、args 存储好并固定返回了 // 参考链接:https://juejin.cn.../post/6921897996258918413 // bind方法分别多次调用,各自都可绑定成功 console.log("================="); // softBind globalThis

71510
领券