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

js原生函数之call和apply,bind

js原生函数中的call和apply都不陌生,这两个方法的作用相似,接受两类参数。 第一类是context(上下文),传入的参数作为执行函数的上下文,也是要传入的第一个参数。...bind方法用于明确指定调用 this 方法。在作用域方面,类似于 call 和 apply 。当你将一个对象绑定到一个函数的 this对象时,你就会用到 bind。...(tom)());//reading bind 和 call的使用方式很类似,同样接受两部分参数,上下文this和作用函数的后续参数,下面是我猜想的bind的模拟实现方法。...后来想到了bind,作为和call的对比也就加了进来,之前没想到bind除了thisArg外还可以继续接受其他参数,因为之前看别人写的bind方法模拟不是这样的, 原来我看到的别人写的bind实现原理代码是这样的...想不到最终收获的是bind。

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

    彻底弄清 this call apply bind 以及原生实现

    Photo by Anas Alshanti on Unsplash 有关 JS 中的 this、call、apply 和 bind 的概念网络上已经有很多文章讲解了 这篇文章目的是梳理一下这几个概念的知识点以及阐述如何用原生...JS 去实现这几个功能 this 指向问题 this this 的指向在严格模式和非严格模式下有所不同;this 究竟指向什么是,在绝大多数情况下取决于函数如何被调用 全局执行环境的情况: 非严格模式下...20190306230406.png 原生实现 call apply bind new 文章上半部分讲解了 this 的指向以及如何使用 call bind apply 方法修改 this 指向;文章下半部分我们用...JS 去自己实现这三种方法 myCall 首先 myCall 需要被定义在 Function.prototype 上这样才能在函数上调用到自定义的 myCall 方法 然后定义 myCall 方法,该方法内部...20190307232419.png 小结 到此为止 this 指向问题 如何修改 this 如何使用原生 JS 实现 call apply bind 和 new 方法 再遇到类似问题,基本常见的情况都能应付得来了

    38210

    彻底弄清 this call apply bind 以及原生实现

    Photo by Anas Alshanti on Unsplash 有关 JS 中的 this、call、apply 和 bind 的概念网络上已经有很多文章讲解了 这篇文章目的是梳理一下这几个概念的知识点以及阐述如何用原生...JS 去实现这几个功能 this 指向问题 this this 的指向在严格模式和非严格模式下有所不同;this 究竟指向什么是,在绝大多数情况下取决于函数如何被调用 全局执行环境的情况: 非严格模式下...20190306230406.png 原生实现 call apply bind new 文章上半部分讲解了 this 的指向以及如何使用 call bind apply 方法修改 this 指向;文章下半部分我们用...JS 去自己实现这三种方法 myCall 首先 myCall 需要被定义在 Function.prototype 上这样才能在函数上调用到自定义的 myCall 方法 然后定义 myCall 方法,该方法内部...20190307232419.png 小结 到此为止 this 指向问题 如何修改 this 如何使用原生 JS 实现 call apply bind 和 new 方法 再遇到类似问题,基本常见的情况都能应付得来了

    41620

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

    1.面试官问:能否模拟实现JS的new操作符 2.面试官问:能否模拟实现JS的bind方法(本文) 3.面试官问:能否模拟实现JS的call和apply方法 4.面试官问:JS的this指向 5.面试官问...:JS的继承 用过React的同学都知道,经常会使用bind来绑定this。...另外前不久写过一篇文章:面试官问:能否模拟实现JS的new操作符。简单摘要:new做了什么: 1.创建了一个全新的对象。...所以相当于new调用时,bind的返回值函数bound内部要模拟实现new实现的操作。话不多说,直接上代码。...文章中的例子和测试代码放在github中bind模拟实现 github。bind模拟实现 预览地址 F12看控制台输出,结合source面板查看效果更佳。

    52420

    手写实现 js 中的bind,并实现 softBind

    // bind会返回一个硬绑定的新函数,新函数会使用指定的第一个thisCtx去调用原始函数,并将其它参数传给原始函数。...); } let fb11 = f1.myBind({ a: 1 }, 10); let bindFn1 = new fb11(); // undefined 10 因为 new 调用优先级高于 bind...3 }, 10); fb33(); // 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

    76010

    面试题目之原生实现call、apply、bind

    去年写了篇文章,call、apply和bind的区别,但是随着市场对前端工程师的要求越来越高,我们也要与时俱进,需要深入的了解一下这三个方法的原理。...首先我们来给call下个定义: call方法在使用一个指定的 this 值和若干个指定的参数值的前提下调用某个函数或方法。...接着再来思考一下bind的实现,在模拟bind的实现之前,先看一下bind的使用案例: var obj = {a:1}; function bar(){ console.log(this.a);...根据上面的使用案例,我们先实现一个简单版本的bind: Function.prototype.myBind = function(ctx) { return () => { // 要用箭头函数,...,当然此处myBind和原生的bind相比还是有些不足,这些就留给大家去完善了,如果你对本文有什么其他想法或者建议,欢迎留言。

    80641

    手写call , apply , bind 方法的实现

    call 方法的实现 先看测试示例,搞懂call方法是干什么用的 const animal = { name: "小鸟" } function foo(num1, num2) { console.log...修改了foo 函数的this指向 (指向了我们上方定义的animal对象) 只有函数类型才可以调用该方法 调用call 方法之后 会立即执行原函数(调用者) 有了上方的总结之后,我们便可以实现一下call...this.name, "会飞翔"); // 小鸟 会飞翔 return sum; } const res = foo.myCall(animal) console.log(res); // 5 apply方法的实现...this const result = context[key](...args) delete context[key] return result } 相比较之前call 方法的实现唯一区别就是...接收参数时候的不同, 因为第二个参数是一个数组 bind方法的实现 这里我们通过调用call 直接修改返回新函数的this指向 // 1.

    8810

    JS 原生方法原理探究(八):如何实现 JSON.stringify()?

    这是JS 原生方法原理探究系列的第八篇文章。本文会介绍如何实现 JSON.stringify() 方法。 JSON.stringify() 可以将对象或值转化为 JSON 字符串。...所以在实现这个方法之前,我们先弄清楚具体的处理规则。...在接下来的代码实现中,首先会分为基本数据类型和引用数据类型两种情况: 基本数据类型:按照上面的规则返回序列化结果。...如果我们处理的 target 是数组,则只需要调用 map 就可以将数组的每一个元素映射为序列化之后的结果,调用后返回的数组赋给 res,再和 [、] 字符拼接,会隐式调用数组的 toString 方法...最后,我并没有实现 JSON.stringify() 中的 replacer 参数和 space 参数,感兴趣的读者可以在上面代码的基础上进一步拓展。 本文到此结束,感谢你的阅读。

    2K50
    领券