zoukankan      html  css  js  c++  java
  • JavaScript apply方法和call方法

    1. apply方法接受2个参数,第一个参数指定了函数体内this对象的指向,第二个参数为一个类似数组的集合

    1 var yunxi = function(a,b){
    2 
    3    console.log([a,b]); // [1,2]
    4 
    5    console.log(this === window); // true
    6 
    7 };
    8 
    9 yunxi.apply(null,[1,2]);

    如上代码,我们第一个参数传入null,函数体内默认会指向与宿主对象,即window对象。

     

    2. call方法第二个参数是以逗号隔开的参数

    1 var yunxi = function(a,b){
    2 
    3    console.log([a,b]); // [1,2]
    4 
    5    console.log(this === window); // true
    6 
    7 };
    8 
    9 yunxi.call(null,1,2);

     

    3. call 和 apply 最常见的用途:改变函数体内的this指向

     1 var longen = {
     2     name:'yunxi'
     3 };
     4 var longen2 = {
     5     name: '我叫涂根华'
     6 };
     7 var name = "我是来测试的";
     8 var getName = function(){
     9     return this.name;
    10 };
    11 console.log(getName()); // 打印 "我是来测试的";
    12 console.log(getName.call(longen)); // 打印 yunxi
    13 console.log(getName.call(longen2)); // 打印 "我叫涂根华"

    第一次调用 getName()方法,因为它是普通函数调用,所以它的this指向与window;

    第二次调用getName.call(longen),执行这句代码后,getName这个方法的内部指针 this 指向 longen 这个对象了,因此打印 this.name 实际上是 longen.name,因此返回的是 name=”yunxi”。

     

    但是 this 指针也有列外的情况,比如一个点击事件,当我们点击一个元素的时候,this指针就指向那个点击元素,但是当我们在内部再包含一个函数后,在函数内再继续调用 this 的话,此时的 this 指针就指向了 window 了,如下代码:

    1 document.getElementById("longen").onclick = function(){
    2     console.log(this); // this 就指向于div元素对象了
    3     var func = function(){
    4         console.log(this); // 打印出window对象
    5     }
    6     func();
    7 }

     

    以上代码可以看到外部 this 指向被点击的那个元素,内部普通函数调用,this 指针都是指向于 window 对象。但是我们可以使用 call 或者 apply 方法来改变 this 指针的指向,如下代码:

    1 document.getElementById("longen").onclick = function(){
    2     console.log(this); // this 就指向于div元素对象了
    3     var func = function(){
    4         console.log(this); // 就指向于div元素对象了
    5     }
    6     func.call(this);
    7 }

     

    以上代码使用 call 方法调用 func 函数,使 this 指向与 func 这个对象了。我们还可以不使用 call 或者 apply 方法来改变 this 的指针,我们可以在外部先使用一个变量来保存 this 的指针,在内部调用的时候我们可以使用此变量即可,如下代码:

    1 document.getElementById("longen").onclick = function(){
    2     console.log(this); // this 就指向于div元素对象了
    3     var self = this;
    4     var func = function(){
    5         console.log(self); // 就指向于div元素对象了
    6     }
    7     func();
    8 }  

     

    学习资源:涂根华的博客 http://www.cnblogs.com/tugenhua0707/p/5046854.html

  • 相关阅读:
    活动安排问题
    喵哈哈村的魔法考试 Round #5 (Div.2) C
    梯度下降,牛顿法 ,高斯牛顿法
    SSD模型解析
    训练较深的卷积神经网络时遇到的问题
    手写体识别
    Fast Patch-based Style Transfer of Arbitrary Style 理解
    多任务学习
    迁移学习(训练数据少的可怜时的办法)
    通过训练得出的结果修改模型
  • 原文地址:https://www.cnblogs.com/xiaochechang/p/5738634.html
Copyright © 2011-2022 走看看