Javascript中bind实现
来源:互联网 发布:多级会员管理系统源码 编辑:程序博客网 时间:2024/05/29 14:23
MDN中bind是这样定义的:
bind()方法创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个给定的参数序列。
由此我们可以看出bind 函数的两个特点:
1. 绑定this,返回一个新函数,便于稍后调用;
2. 可以传入参数 (可以预传参,只需要传入剩下的参数)
看个bind应用的例子:
var person = { name: 'nuan'}function sayName(prefix, suffix){ console.log(prefix + this.name + suffix) // Hello, nuan???}var newSayName = sayName.bind(person,'Hello, ')newSayName('???')
下面从bind函数的两个特点进行实现:
为了满足第一个返回一个新函数的特点,下面是个简化版的bind实现:
Function.prototype.bind = function(context){ var self = this; //保存原函数 return function(){ //返回一个新的函数 return self.apply(context, arguments); //执行新的函数的时候,会把之前传入的context当做新函数体内的this }}var obj = { name: 'sven'}var func = function(){ console.log(this.name); //sven}.bind(obj);func();
为了满足第二个bind函数可以预传参,只需要传入剩下的参数的特点,最终实现如下:
Function.prototype.bind = function () { var self = this, //保存原函数 context = [].shift.call(arguments), //需要绑定的this上下文 args = [].slice.call(arguments); //剩余的参数转为数组 return function(){ //返回一个新的函数 return self.apply(context, [].concat.call(args, [].slice.call(arguments))); //执行新的函数的时候,会把之前传入的context当做新函数体内的this //并且组合两次分别传入的参数,作为新函数的参数 }}var obj = { name: 'sven'}var func = function(a, b, c, d) { console.log(this.name); //sven console.log([a, b, c, d]); //[1, 2, 3, 4]}.bind(obj, 1, 2);func(3, 4);
参考阅读
- JavaScript设计模式与开发实践–曾探著
- bind
- bind函数的实现
阅读全文
0 0
- Javascript中bind实现
- JavaScript-Javascript中bind()方法的使用与实现
- Javascript中bind()方法的使用与实现
- Javascript中bind()方法的使用与实现
- Javascript中bind()方法的使用与实现
- Javascript中bind()方法的使用与实现
- Javascript中bind()方法的使用与实现
- Javascript中bind()方法的使用与实现
- Javascript中bind()方法的使用与实现
- javascript---bind的实现方法
- Javascript中apply、call、bind
- JavaScript中使用bind()方法
- Javascript中apply、call、bind
- Javascript中apply、call、bind
- Javascript中apply、call、bind
- Javascript 中 apply、call、bind
- Javascript中apply、call、bind
- Javascript中apply、call、bind
- Android 热修复 Tinker Gradle Plugin解析
- 一个经典的n皇后问题
- js 中{},[]中括号,大括号使用详解
- Python系列(三)之Python高级特性
- 奶爸英语学习课程要点(第8课, 彻底突破常速英语, 中级)
- Javascript中bind实现
- 顶顶顶顶
- Mysql安装教程
- [Leetcode] 547. Friend Circles 解题报告
- matlab在图片上画框
- 贪吃蛇游戏设计
- PADS PCB开窗问题
- 九九乘法表java实现
- 自定义Gradle插件学习笔记