zoukankan      html  css  js  c++  java
  • Atitit.js this错误指向window的解决方案

    Atitit.js this错误指向window的解决方案

     

     

    1.1. 出现地点and解决之道1

    1.2. call,applybind这三个方法2

    1.2.1. Function.prototype.call2

    1.3. 在函数内部出现的this,指什么要看这个this所在的函数的被调用方式。 不论这个this出现在什么样的函数中,层次有多深,结构多复杂,只要看直接包含它的函数即可。例如:  (1) 被直接调用时,this指全局对象window。3

    2ref3

     

     

    1.1. 出现地点and解决之道

    出现地点::: 回调js  methd的时候儿...

    解决之道::HRE.exe(mp,this.merge_callback.bind(this));

     

    因为:::

     

    下面说说我的拙见,如有不对,大神请指出。
    先看setTimeout(this.sayHello, 1000);
    this.sayHello只是传了一个函数引用过去,这里的this指的是foo.prototype,因为JS函数块是作用域,而setTimeout(this.sayHello, 1000); 是在foo.prototype.bar里面。

    foo.prototype.bar = function(){

    setTimeout(this.sayHello, 1000);

    }

    所以就相当于

    setTimeout(function(){

        alert(this.myName);

    }, 1000);

    属于2、函数调用,this指向window。



     

    setTimeout其实是window.setTimeout,setTimeout执行的时候this是指向window

    作者::  (attilax)>>> 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙,  EMAIL:1466519819@qq.com

    转载请注明来源: http://blog.csdn.net/attilax

     

    1.2. call,applybind这三个方法

    1.2.1. Function.prototype.call

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

    可以用来指定调用call的函数的this指向(函数体的作用域),在所给定的thisArg(对象)作用域中执行该函数(call的调用者),后面的参数是函数调用过程中需要用到的数据,以逗号分隔的形式给出。

     

     

    apply函数与call的使用场景类似,不同的地方是在调用参数部分,直接给出的是参数数组,而不是挨个添加,这对于编码来讲,大有裨益,可以直接把参数处理成数组的形式,传递进去,省去不少功夫,也提升了自动化能力

     

    与上面不同的是,bind会返回一个改变this指向的新函数 ,注意这里强调的是新函数,其与之前的使用的不是同一块内存地址,

     

     

    1.3. 在函数内部出现的this,指什么要看这个this所在的函数的被调用方式。
    不论这个this出现在什么样的函数中,层次有多深,结构多复杂,只要看直接包含它的函数即可。例如:

    (1) 被直接调用时,this指全局对象window。

        func();

    (2) 被作为构造函数调用时,this指当前正在构建的对象。

        new func();

    (3) 被作为某个对象A的方法调用时,this指方法所属的对象A。

        A.func();

    (4) 使用函数的apply或call方法调用时,this指第一个参数B。

        func.apply(B, [m, n, ...]);

        

        func.call(B, m, n, ...);



    2. ref

    JS中的callapplybind方法的区别-日拱一卒-微头条(wtoutiao.com).htm

    (2 封私信   条消息) JS中的this 在不同的地方指向不一样,在哪些地方需要注意? 知乎.htm

  • 相关阅读:
    主机无法ping通网关,但可以ping通局域网内的其他主机
    linux下安装mysql
    国内python源
    在vue中引入element-ui时报错
    在windows上部署vue
    linux上部署vue开发环境
    vue插件之vue-router路由基本使用
    vue监听属性变化
    vue过滤器
    vue组件的使用
  • 原文地址:https://www.cnblogs.com/attilax/p/5963422.html
Copyright © 2011-2022 走看看