首页 > 其他分享 >手写bind函数

手写bind函数

时间:2024-04-26 17:56:58浏览次数:13  
标签:函数 fn1 bind let 手写 指向 target

今天无事手写一个bind函数

//重写bind函数
Function.prototype.bindDemo = function(){
  // arguments可以获取到传的参数
  // 1.先把获取到的数据转换为数组的格式
  let args = Array.prototype.slice.call(arguments);
  // 2.获取数组中第一个元素,即this即将指向的数据
  let first = args.shift();
 // 3.获取要改变this指向的数据的this,这里的this指的是fn1的this,因为fn1会调用这个bindDemo函数
  let self = this;
  return function(){
  return self.apply(first,args);
}
}
//调用bind函数改变函数fn1的this指向
function fn1(a,b,c){
console.log('fn1 this',this)//打印fn1的this,验证
return 'this is fn1'
}
let target = {x:100,b:200}
let fn2 = fn1.bindDemo(target,1,2,3);//将fn1的this指向为target;
fn2();

可以看到fn1的this指向已经是target了!!

标签:函数,fn1,bind,let,手写,指向,target
From: https://www.cnblogs.com/maleijiejie/p/18160570

相关文章

  • day25-索引和函数及存储过程
    1.索引在数据库中索引最核心的作用是:加速查找。例如:在含有300w条数据的表中查询,无索引需要700秒,而利用索引可能仅需1秒。mysql>select*frombigwherepassword="81f98021-6927-433a-8f0d-0f5ac274f96e";+----+---------+---------------+------------------------------......
  • js的函数及无参与有参构造函数
    1.函数定义fuctionfn(str){//1.定义函数alert(str);}fn("测试方法");varfn1=function(str){//2.定义函数alert(str);}varfn2=fuction(f,str){f(str);}fn2(fn1,"方法作为参数");//函数可以作为方法传递参数2.无参构造:varperson=function(){alert("......
  • C++内联函数
    内联函数关键字inline,inline是空间换时间,提高了程序效率但花费了更多空间。举个例子,下面是一段C语言代码:voidfun(inti){returni*2;}intmain(){inta=4;intb=fun(a);}假定以上C文件被编译器编译成的汇编代码如下:_f_int: addax,@sp[-8] ;相当......
  • 类成员函数作为回调使用示例
    在编写C++项目时,经常需要将类的某个成员函数作为回调函数使用,这里总结两个方法:1.使用lambda函数,将类函数封装后使用,代码示例:#include<funtional>#include<memory>classA{public:A(std::function<int(int)>callback):m_callback(callback){}intRun(......
  • 【Qt 专栏】QString::arg()函数
    原文链接:https://blog.csdn.net/Gnar_w/article/details/134966919作者:Gnar_w  (CSDN) 一、说明在QT的QString中,arg方法类似于C中的printf中使用的格式输出符(仅有些许类似)。二、使用有以下方式:使用arg(str1,str2,str3)这种方法进行替换。使用arg(str1).arg(str2).arg(......
  • C#中常用作event的delegate 函数
    1publicdelegatevoidEventHandler<TEventArgs>(objectsender,TEventArgse);使用例子:publiceventEventHandler<TcpClientKickedEventArgs>ClientKicked;//怎样调用if(ClientKicked!=null){ClientKicked(this,newTcpClientKickedE......
  • dotnet C# 使用 Win32 函数获取用户下载文件夹的路径的方法
    大家都知道,在dotnet里面的可以使用Environment.GetFolderPath方法配合Environment.SpecialFolder枚举列出当前运行环境下的一些特殊文件夹。然而SpecialFolder枚举不包含对Download下载文件夹的枚举值,如咱需要获取用户当前的下载文件夹,需要使用Win32方法来辅助获取在......
  • 双向循环链表的插入处理函数接口
    //方便访问,创建一个带头结点的双向循环链表//链表数据域取别名方便修改typedefintDataType_t;//构造双向循环链表的结点typedefstructDoubleCircularLList{DataType_tdata;//数据域structDoublLingkedList*prev;//直接前驱指针域......
  • vue中函数使用、class和style属性、条件渲染、列表渲染、数据的双向绑定、input事件、
    【事件指令中的函数使用】1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<title>Title</title>6<scriptsrc="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"&......
  • 生成函数
    生成函数我们可以把生成函数看作是代数对象,其形式上的处理使得人们可以通过代数手段计算一个计数问题。通常我们默认级数是收敛的。(主要原因在于代数手段往往是需要保证收敛的)本文章不涉及多项式题目(交给考拉)普通生成函数的定义为:\[\displaystyle\sum_{n}a_nx^n\]常见的......