<legend id='xp49I'><style id='xp49I'><dir id='xp49I'><q id='xp49I'></q></dir></style></legend>
<tfoot id='xp49I'></tfoot>

      • <bdo id='xp49I'></bdo><ul id='xp49I'></ul>
      1. <small id='xp49I'></small><noframes id='xp49I'>

        <i id='xp49I'><tr id='xp49I'><dt id='xp49I'><q id='xp49I'><span id='xp49I'><b id='xp49I'><form id='xp49I'><ins id='xp49I'></ins><ul id='xp49I'></ul><sub id='xp49I'></sub></form><legend id='xp49I'></legend><bdo id='xp49I'><pre id='xp49I'><center id='xp49I'></center></pre></bdo></b><th id='xp49I'></th></span></q></dt></tr></i><div id='xp49I'><tfoot id='xp49I'></tfoot><dl id='xp49I'><fieldset id='xp49I'></fieldset></dl></div>

        js apply/call/caller/callee/bind使用方法与区别分析

        JS中的apply、call、caller、callee以及bind是函数对象的5个方法,它们可以帮助我们更加灵活地调用函数、改变函数的this指向以及传递参数。本文将详细讲解它们的使用方法和区别分析。

          <legend id='PAQL8'><style id='PAQL8'><dir id='PAQL8'><q id='PAQL8'></q></dir></style></legend>
            <bdo id='PAQL8'></bdo><ul id='PAQL8'></ul>

                <tbody id='PAQL8'></tbody>
            • <small id='PAQL8'></small><noframes id='PAQL8'>

                <tfoot id='PAQL8'></tfoot>
                • <i id='PAQL8'><tr id='PAQL8'><dt id='PAQL8'><q id='PAQL8'><span id='PAQL8'><b id='PAQL8'><form id='PAQL8'><ins id='PAQL8'></ins><ul id='PAQL8'></ul><sub id='PAQL8'></sub></form><legend id='PAQL8'></legend><bdo id='PAQL8'><pre id='PAQL8'><center id='PAQL8'></center></pre></bdo></b><th id='PAQL8'></th></span></q></dt></tr></i><div id='PAQL8'><tfoot id='PAQL8'></tfoot><dl id='PAQL8'><fieldset id='PAQL8'></fieldset></dl></div>

                  JS中的apply、call、caller、callee以及bind是函数对象的5个方法,它们可以帮助我们更加灵活地调用函数、改变函数的this指向以及传递参数。本文将详细讲解它们的使用方法和区别分析。

                  apply和call方法

                  apply和call方法用于调用一个函数,并且可以指定函数的this指向,同时还可以将参数以数组或者类数组的形式传递给函数。

                  apply方法

                  apply方法的语法格式为:

                  function.apply(thisArg[, argsArray])
                  

                  其中,thisArg表示函数的this指向,argsArray表示传递给函数的参数数组。

                  例如,我们可以通过apply方法将Array的push方法应用于另一个对象上,代码如下:

                  let obj1 = {
                    length: 0
                  };
                  
                  let arr1 = [1, 2, 3];
                  
                  Array.prototype.push.apply(obj1, arr1);
                  
                  console.log(obj1);
                  // {0: 1, 1: 2, 2: 3, length: 3}
                  

                  在以上示例中,我们使用apply方法将Array原型对象上的push方法应用到obj1对象上,并传入arr1数组作为参数列表。由于obj1对象并没有push方法,但是通过这种方式我们可以成功地将arr1数组中的元素添加到obj1对象中。

                  call方法

                  call方法的语法格式与apply方法类似,但是它的第二个参数是一个可以逐个列举出传递给函数的参数列表。

                  function.call(thisArg[, arg1[, arg2[, ...]]])
                  

                  例如,我们可以通过call方法将对象的属性和方法应用于另一个对象上,代码如下:

                  let obj2 = {
                    name: 'Tom'
                  };
                  
                  let obj3 = {
                    name: 'Jerry',
                    sayHello: function() {
                      console.log('Hello ' + this.name);
                    }
                  };
                  
                  obj3.sayHello.call(obj2);
                  // Hello Tom
                  

                  在以上示例中,我们使用call方法将obj2对象应用于obj3的sayHello方法上,从而使得在sayHello方法中this指向了obj2对象。

                  caller和callee方法

                  caller和callee方法用于获取函数的引用和调用当前函数的函数的引用,通常用于调试和递归操作。

                  caller方法

                  caller方法返回一个函数对象的引用,它代表调用当前函数的函数。

                  例如,我们可以使用一个递归函数来演示caller方法,代码如下:

                  function recursion(n) {
                    if(n === 0) {
                      console.log('stop');
                    } else {
                      console.log(recursion.caller);
                      recursion.caller(n - 1);
                    }
                  }
                  
                  recursion(3);
                  

                  在以上示例中,我们使用recursion.caller方法获取调用递归函数的函数的引用,并进行了多次递归操作。

                  callee方法

                  callee方法返回当前正在执行的函数的引用,通常用于递归操作。

                  例如,我们可以使用一个递归函数来演示callee方法,代码如下:

                  function fib(n) {
                    if (n <= 2) {
                      return 1;
                    }
                    return fib.callee(n - 1) + fib.callee(n - 2);
                  }
                  
                  console.log(fib(10));
                  

                  在以上示例中,我们使用fib.callee方法获取当前正在执行的函数的引用,并进行了对斐波那契数列的递归操作。

                  bind方法

                  bind方法可以创建一个新的函数,并且绑定指定的this对象,同时返回一个新的函数对象。

                  function.bind(thisArg[, arg1[, arg2[, ...]]])
                  

                  例如,我们可以使用bind方法来创建一个新的函数,并指定其this指向:

                  let obj4 = {
                    message: 'Hello world!'
                  };
                  
                  let displayMessage = function() {
                    console.log(this.message);
                  }.bind(obj4);
                  
                  displayMessage();
                  // Hello world!
                  

                  在以上示例中,我们使用bind方法创建了一个新的函数displayMessage,并将其this指向obj4对象。这样,在调用displayMessage函数的时候,其this指向obj4对象。

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  treetable.js没有checked做联动。于是自己基于treetable开发的一个小功能,希望能和大家一起交流一下。 1. 在当前HTML文档checked监听函数中增加以下代码 //联动 table.on('checkbox(quan_list)', function(obj){ //console.log(obj); //当前id var id = obj.
                  当使用Javascript的attachEvent来绑定事件时,我们希望能够给事件处理函数传递一些参数,但是attachEvent本身并不支持传递参数。下面介绍两种解决方法。
                  KnockoutJS是一款流行的JavaScript库,针对一个web应用程序的建立提供了比较好的基础架构。其中,表单的数据绑定功能是KnockoutJS最为常用的功能之一。本文将详细讲解KnockoutJS 3.x
                  下面是用javascript实现改善用户体验之alert提示效果的完整攻略。
                  在学习JavaScript编写贪吃蛇游戏之前,需要掌握以下的前置知识:

                  <tfoot id='3s09Y'></tfoot>

                        <legend id='3s09Y'><style id='3s09Y'><dir id='3s09Y'><q id='3s09Y'></q></dir></style></legend>
                          <tbody id='3s09Y'></tbody>

                        <small id='3s09Y'></small><noframes id='3s09Y'>

                        • <bdo id='3s09Y'></bdo><ul id='3s09Y'></ul>
                          • <i id='3s09Y'><tr id='3s09Y'><dt id='3s09Y'><q id='3s09Y'><span id='3s09Y'><b id='3s09Y'><form id='3s09Y'><ins id='3s09Y'></ins><ul id='3s09Y'></ul><sub id='3s09Y'></sub></form><legend id='3s09Y'></legend><bdo id='3s09Y'><pre id='3s09Y'><center id='3s09Y'></center></pre></bdo></b><th id='3s09Y'></th></span></q></dt></tr></i><div id='3s09Y'><tfoot id='3s09Y'></tfoot><dl id='3s09Y'><fieldset id='3s09Y'></fieldset></dl></div>