zoukankan      html  css  js  c++  java
  • JS this,call和apply以及回调函数

    this

    this引用,引用的是一个对象,对象不同或函数调用方式的不同,this引用会根据代码的上下文语境自动改变引用对象的特性。

    引用规则

    1,在最外层代码中,this引用引用的是全局对象(windows)

    2,在函数内,this引用根据函数调用方式不同而不同

    1)在构造函数中,this引用的对象是构造函数生成的对象

    2)方法调用,this引用的是接受方对象

    3)appl和call调用,引用的对象由两个函数的参数指定

    4)其他方式调用,引用的是全局对象

    call和apply是Function对象的方法

    方法的定义

    call方法: 
    语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 
    定义:调用一个对象的一个方法,以另一个对象替换当前对象。 
    说明: 
    call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 
    如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。 

    apply方法: 
    语法:apply([thisObj[,argArray]]) 
    定义:应用某一对象的一个方法,用另一个对象替换当前对象。 
    说明: 
    如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。 
    如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。

    简单来说就是有如下不同

    func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3])


    回调函数(callback)

     function  a(callback){
          alert('a');
          callback();//或者是 callback(),  callback.apply(this)
    
       }
       function  b(){
           alert('b');
       }
    //调用
    a(b);

    但是多数时候回调函数是有参数的所以应该向下面这样来定义
    function  a(callback){
          alert('a');
          callback.call(this,'d');//或者是 callback(),  callback.apply(this)
    }
    //调用

    c(function(e){ alert(e); });




  • 相关阅读:
    [原][诗]送幼儿园杨老师
    [原]由智能音箱被黑联想到。。。人类灭亡
    [转]VS中的路径宏 OutDir、ProjectDir、SolutionDir各种路径含义
    [原]globalmapper设置高程配色(globalmapper自定义配色方案)
    [原]JSON 字符串(值)做判断,比较 “string ”
    [转]使用 curl 发送 POST 请求的几种方式
    [转]c++多线程编程之pthread线程深入理解
    [转]c++ pthread 多线程简介
    Linux下ps -ef和ps aux的区别
    Java三种方式实现栈和队列
  • 原文地址:https://www.cnblogs.com/fslnet/p/4457950.html
Copyright © 2011-2022 走看看