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

JS 手写: call、applybind

该方法的语法和作用与 apply() 方法类似,只有一个区别,就是 call() 方法接受的是一个参数列表,而 apply() 方法接受的是一个包含多个参数的数组。...apply 可以使用数组字面量(array literal),如 fun.apply(this, ['eat', 'bananas']),或数组对象, 如 fun.apply(this, new Array...# Try it bind() 方法创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用。...# 描述 bind() 函数会创建一个新的绑定函数(bound function,BF)。...# 示例 # 创建绑定函数 bind() 最简单的用法是创建一个函数,不论怎么调用,这个函数都有同样的 this 值。

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

js中call、applybind那些事

前言 回想起之前的一些面试,几乎每次都会问到一个js中关于call、applybind的问题,比如… 怎么利用call、apply来求一个数组中最大或者最小值 如何利用call、apply来做继承 apply...(坑爹了,这好像在让巧媳妇去做无米之炊),不过没关系,call、applybind可以帮我们干这件事。...123456 // 1 callperson.showName.call(animal);// 2 applyperson.showName.apply(animal);// 3 bindperson.showName.bind...所以其实他们干的事从本质上讲都是一样的动态的改变this上下文,但是多少还是有一些差别的.. call、applybind的差别 call和apply改变了函数的this上下文后便执行该函数,而bind...;fn.apply(obj, [arg1, arg2, arg3...]); 应用 知道了怎么使用和他们之间的区别,接下来我们来了解一下通过call、applybind的常见应用场景。

1.7K50

手写JS函数的call、applybind

之所以要写这篇,是因为曾经面试被要求在白纸上手写bind实现  结果跟代码一样清晰明确,一阵懵逼,没写出来!  下面,撸起袖子就是干!~  把call、applybind一条龙都整一遍!...定义与使用Function.prototype.apply(): developer.mozilla.org/zh-CN/docs/…// Function.prototype.apply()样例function...console.log(this.name) console.log(arg1 + arg2)}const _this = { name: 'YIYING' }// 参数为数组;方法立即执行fun.apply...(_this, [1, 2])// 输出:YIYING3手写实现/** * 自定义Apply实现 * @param context 上下文this对象 * @param args 参数数组...定义与使用Function.prototype.bind(): developer.mozilla.org/zh-CN/docs/…// Function.prototype.bind()样例function

1.2K20

手写JS函数的call、applybind

之所以要写这篇,是因为曾经面试被要求在白纸上手写bind实现  结果跟代码一样清晰明确,一阵懵逼,没写出来!  下面,撸起袖子就是干!~  把call、applybind一条龙都整一遍!...定义与使用Function.prototype.apply(): developer.mozilla.org/zh-CN/docs/…// Function.prototype.apply()样例function...console.log(this.name) console.log(arg1 + arg2)}const _this = { name: 'YIYING' }// 参数为数组;方法立即执行fun.apply...(_this, [1, 2])// 输出:YIYING3手写实现/** * 自定义Apply实现 * @param context 上下文this对象 * @param args 参数数组...定义与使用Function.prototype.bind(): developer.mozilla.org/zh-CN/docs/…// Function.prototype.bind()样例function

1K30

js原生函数之call和applybind

call 和 apply call 和 applybind 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。...js原生函数中的call和apply都不陌生,这两个方法的作用相似,接受两类参数。 第一类是context(上下文),传入的参数作为执行函数的上下文,也是要传入的第一个参数。...说了call和apply,也是要介绍一下bind的。...bind方法用于明确指定调用 this 方法。在作用域方面,类似于 call 和 apply 。当你将一个对象绑定到一个函数的 this对象时,你就会用到 bind。...that.apply(scope, arguments); } } 后来自己实验了一遍,发现不对,才自己做了修改 Function.prototype.bind = function(scope)

86600

apply()、call()、bind()

apply()、call()、bind() 每个Function对象都存在apply()、call()、bind()方法,其作用都是可以在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域...使用 apply()、call()、bind()都能改变函数对象的this指向 window.name = "A"; //挂载到window对象的name document.name = "B"; //...rollCall.sayName.apply(); //A //不传参默认绑定window rollCall.sayName.apply(window); //A //绑定window对象 rollCall.sayName.apply...//最后一个()是为让其执行 rollCall.sayName.bind()(); //A //不传参默认绑定window rollCall.sayName.bind(window)(); //A /...区别 虽然apply()、call()、bind()都能够达到改变this指针的目的,但是其使用还是有区别的 // apply与call传参方式不同 window.name = "Teacher";

67720

JS中的bindapply、call的理解

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

92610

js的this、call、applybind、继承、原型链

本文来自我的github 0.前言 这些都是js基础进阶的必备了,有时候可能一下子想不起来是什么,时不时就回头看看基础,增强硬实力。...、bind 指向传入函数的第一个参数。...、bind 前两者都是一样,只是参数表现形式不同,bind表示的是静态的前两者,需要手动调用 a.call(b,args)让函数a执行上下文指向b,也就是b的属性就算没有a函数,也能像b.a(args)...我们都可以实现,这里就不再重复 return f.apply(ctx,args1.concat(args2))//将预先填入的参数和执行时的参数合并 } } 此外,需要注意的,一个函数被bind后...,以后无论怎么用call、applybind,this指向都不会变,都是第一次bind的上下文 3.从call到继承 首先,js没有严格意义上的子类父类,实现继承是依靠原型链来实现类似于所谓的类的效果

87810

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

函数原型链中的 apply,call 和 bind 方法是 JavaScript 中相当重要的概念,与 this 关键字密切相关,相当一部分人对它们的理解还是比较浅显,所谓js基础扎实,绕不开这些基础常用的...目录 call,apply,bind的基本介绍 call/apply/bind的核心理念:借用方法 call和apply的应用场景 bind的应用场景 中高级面试题:手写call/applybind...调用call/apply/bind的必须是个函数 call、applybind是挂在Function对象上的三个方法,只有函数才有这些方法。...call/applybind的区别 执行: call/apply改变了函数的this上下文后马上执行该函数 bind则是返回改变了上下文后的函数,不执行该函数 返回值: call/apply 返回fun...关于js事件循环机制不理解的同学,可以看我这篇博客:Js 的事件循环(Event Loop)机制以及实例讲解 那么如何使他输出: 1,2,3,4,5呢?

1.4K21
领券