首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

js原生函数之call和apply,bind

call 和 apply call 和 apply 和 bind 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。...js原生函数的call和apply都不陌生,这两个方法的作用相似,接受两类参数。 第一类是context(上下文),传入的参数作为执行函数的上下文,也是要传入的第一个参数。...bind方法用于明确指定调用 this 方法。在作用域方面,类似于 call 和 apply 。当你将一个对象绑定到一个函数的 this对象时,你就会用到 bind。...(tom)());//reading bind 和 call的使用方式很类似,同样接受两部分参数,上下文this和作用函数的后续参数,下面是我猜想的bind的模拟实现方法。...和call的主要区别在于,bind返回的是一个新函数,而call这是直接执行了该函数

86700

JScall 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

jscall、apply、bind那些事

前言 回想起之前的一些面试,几乎每次都会问到一个js关于call、apply、bind的问题,比如… 怎么利用call、apply来求一个数组中最大或者最小值 如何利用call、apply来做继承 apply...作用 首先问个问题,这三个函数的存在意义是什么?答案是改变函数执行时的上下文,再具体一点就是改变函数运行时的this指向。有了这个认识,接下来我们来看一下,怎么使用这三个函数。...所以其实他们干的事从本质上讲都是一样的动态的改变this上下文,但是多少还是有一些差别的.. call、apply与bind的差别 call和apply改变了函数的this上下文后便执行该函数,而bind...则是返回改变了上下文后的一个函数。...的伪数组(例如通过document.getElementsByTagName获取的元素)具有length属性,并且可以通过0、1、2…下标来访问其中的元素,但是没有Array的push、pop等方法

1.7K50

jscall、apply、bind那些事

前言 回想起之前的一些面试,几乎每次都会问到一个js关于call、apply、bind的问题,比如… 怎么利用call、apply来求一个数组中最大或者最小值 如何利用call、apply来做继承 apply...作用 首先问个问题,这三个函数的存在意义是什么?答案是改变函数执行时的上下文,再具体一点就是改变函数运行时的this指向。有了这个认识,接下来我们来看一下,怎么使用这三个函数。...所以其实他们干的事从本质上讲都是一样的动态的改变this上下文,但是多少还是有一些差别的.. call、apply与bind的差别 call和apply改变了函数的this上下文后便执行该函数,而bind...则是返回改变了上下文后的一个函数。...8,687); Math.min.apply(Math, arr); Math.min.call(Math, 34,5,3,6,54,6,-67,5,7,6,-8,687); 将伪数组转化为数组 js

1.6K60

JSbind、apply、call的理解

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

92610

参数绑定---bind函数

标准库bind函数 我们可以解决向check_size传递一个长度参数的问题。 方法是使用一个新的名为bind的标准库函数,它定义在头文件functional。...可以将bind函数看作一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来适应原对象的参数列表 调用bind的一般形式为: auto newCallable=bind(callable,...与bind函数一样,placeholders命名空间也定义在functional头文件 bind的参数 我们可以用bind绑定给定可调用对象的参数或重新安排其顺序。...标准库还有一个cref 函数,生成一个保存const引用的类 与bind一样,函数ref和cref定义在头文件functional 注意: 标准库定义了两个分别为bindlst和bind2nd的函数...由于这些函数局限太强,在新标准库已经被弃用。 新的c++程序应该使用bind

1.1K30

JS 手写: call、apply、bind

# 示例 # 使用 call 方法调用父构造函数 在一个子构造函数,可以通过调用父构造函数的 call 方法来实现继承,类似于 Java 的写法。...# Try it bind() 方法创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用。...如果使用 new 运算符构造绑定函数,则忽略该值。当使用 bind 在 setTimeout 创建一个函数(作为回调提供)时,作为 thisArg 传递的任何原始值都将转换为object。...当目标函数被调用时,被预置入绑定函数的参数列表的参数。 返回值 返回一个原函数的拷贝,并拥有指定的 this 值和初始参数。...绑定函数是一个 exotic function object(怪异函数对象,ECMAScript 2015 的术语),它包装了原函数对象。调用绑定函数通常会导致执行包装函数

1.5K30

jsbind函数那些你可能没想过的点

1 js对一个bind返回的函数执行new时会怎样 function A(a,b){ this.a=a; this.b=b } var a = A.bind({x:1},1) var...2 js函数执行bind后再次执行bind或call时会怎样 var test = function(x,y){ console.log(this,arguments) } var a=test.bind...这段话说到如果我们在一个由bind创建的函数调用call,假设是x.call(obj,y,z,…)并且传入this,和参数列表的时候会执行下面的步骤: 1.首先用三个参数分别保存函数x函数的内部属性存的...的bind函数说明我们知道,当我们用一个函数调用bind的时候,返回的函数中会保存这三个参数。...3 jsbind返回的函数执行new的时候,instanceof的行为 function A(){ } var b = A.bind({}) var c = new b(); c instanceof

56410

手写实现 js bind,并实现 softBind

// bind会返回一个硬绑定的新函数,新函数会使用指定的第一个thisCtx去调用原始函数,并将其它参数传给原始函数。...硬绑定会降低函数的灵活性,在绑定之后不能通过显式或硬绑定的方式改变this,只能通过new改变 // softBind 会对指定的函数进行封装,首先检查调用时的 this,如果 this 绑定到全局对象或者...undefined,那就用指定的thisCtx 去调用函数,否则不会修改 this Function.prototype.myBind = function (context, ...args) {...); } let fb11 = f1.myBind({ a: 1 }, 10); let bindFn1 = new fb11(); // undefined 10 因为 new 调用优先级高于 bind...方法链式调用,都以第一次bind绑定为准,所以叫硬绑定,原理为 下一次 调用bind的方法为上一个bind方法返回的闭包,已经将 context、args 存储好并固定返回了 // 参考链接:https

70910

jsthis指向问题及call,apply,bind的区别

jsthis指向问题及call,apply,bind的区别# 1 this指向# 1.1 what is 'this'?...# 在 ECMAScript 5 函数内部存在两个特殊的对象:arguments(一个类数组对象,包含调用函数时传入的所有参数) 和 this(本文将要讲的)。...1.2 标准函数与箭头函数的this指向# this在标准函数与箭头函数的时会有两种不同类型的指向行为。...1.2.1 标准函数的this指向# 在标准函数,this 指向的是把函数当成方法调用的上下文对象。也就是说在哪里调用的这个函数,那这个this只会指向它外面最靠近它的对象。...可以向cally一样传参,例如: a.say.bind(b, '男', 'UNO')() // 但由于bind返回的仍然是一个函数,所以我们还可以在函数调用的时候再进行传参。

1.1K20

JS手撕(四) call、apply、bind、柯里化、偏函数

JS手撕(四)    call、apply、bind、柯里化、偏函数 call call()方法就是使用一个指定的this值和一个或多个参数来调用一个函数。...bind bind()也能够像上面一样,使用指定的this值,不过有一个很大的不同,那就是bind()是返回一个函数,而不是立即调用。...顺带提一下一个注意点:调用bind()时,可以传参,调用该方法返回的函数也可以传参。所以会有两拨参数。...,而是不够的参数直接把值当成`undefined` addPartial(7)(8); // 报错,不能像柯里化一样(有点点像低配柯里化) 参考 死磕 36 个 JS...手写题(搞懂后,提升真的大) - 掘金 GitHub - qianlongo/fe-handwriting: 手写各种js Promise、apply、call、bind、new、deepClone…

38440
领券