zoukankan      html  css  js  c++  java
  • Call

    call的作用记住三句话!

    第一:改变前方法的this,不管前面有多少东西
    第二:让前方法执行,不管前面有多长
    第三:call方法最终执行的一核心是this()

    PS:注意!两个及以上的call.最后一个call的第一个参数是来改变前面call方法中的this,那么this()就是变成了第一个参数执行,所以第一个参数必须是函数,否则会报错!!!

    原型上的call方法是一个函数,这个方法至少要传一个参数,这个参数是用来改变call前面的方法的this的.
    call两个作用:
    1.改变this,
    2让当前函数执行
    实例.call//call中的this就是实例本身
    所有的函数都有一个属性length,表示形参的数量

    fn.call(window)1.将fn中的this变成window.2让fn执行
    fn.call(obj)1.将fn中的this变成obj.2让fn执行
    在非严格模式下不产参数或者传null和Undefined,默认时window,在严格模式下"use strict",不传参数或者null或者Undefined是将this变成了Undefined
    

    call方法从第二个参数开始就是给前面的函数传的参数

    function(n,m){};
    fn.call(obj,1,2)
    

    当使用函数.call.call(),两个以上的call你传的参数不是一个函数就会报错,因为只有函数的原型上才会有call这个方法 .
    换句话说你用两个及以上的call方法执行的时候,就相当于把你传进来的那个函数执行

    fn.call();
    fn.call.call(obj);//obj.call()
    

    call方法原理

    function fn(){
    console.log(this);
    }
    var obj={1:1};
    Function.prototype.call=function(obj.n.m){
    //谁去执行call方法this就是谁
    
    obj是改变this的this
    假如说fn.call,这里面的this就是fn
    就把
    };
    
    
    

    =========================================

    严格模式

    
    "use strict"//严格模式
    //函数执行的时候,前面没有点,this->Undefined
    function fn(){}
    fn();
    window.fn();
    call()不传参数this->Undefined;传了个null->this=null;传了undefined->this就是undefined
    fn.call();//Undefined
    fn.call
    
    

    call将类数组转为数组

    try catch 方法

    try catch(e)

    try{
    先执行try里面的代码,如果报错就执行catch里面的代码
    }catch(e){
    e是一个对象,里面存在错误信息,存在e.message里面存的是try里面的错误信息
    throw new Error("我错误")//抛出错误
    }
    
     function toArray(likeArray) {
            //call在低版本IE下不支持
            var ary = [ ];
            try {
                return ary.prototype.slice.call(likeArray, 0);
            }
            catch (e) {
                console.log(e.message);
    for(var i=0;i<likeArray.length;i++) {
                    ary.push(likeArray[i])
                }
                return ary
            }
        }
        function fn() {
            return toArray(arguments)
        }
    
        console.log(fn(1, 2, 3, 5, 6, 7, 10));
    
    

    Call的核心

    call是个函数,是定义在Function原型上的函数属性,所有的函数都可以通过_ _ proto _ _找到Function类原型上的call方法. call方法在执行的时候里面的this就是call前面的点"."之前的东西

    call方法中个核心的代码就是this()执行,也就是call前面的函数执行

    Function.prototype.call=function(){};
    function fn(){
    console.log(this)
    }
    fn.call(null,1,2);
    
  • 相关阅读:
    Python基础语法 第2节课(数据类型转换、运算符、字符串)
    python基础语法 第5节课 ( if 、 for )
    python基础语法 第4节课 (字典 元组 集合)
    Python基础语法 第3节课 (列表)
    A. Peter and Snow Blower 解析(思維、幾何)
    C. Dima and Salad 解析(思維、DP)
    D. Serval and Rooted Tree (樹狀DP)
    C2. Balanced Removals (Harder) (幾何、思維)
    B. Two Fairs 解析(思維、DFS、組合)
    D. Bash and a Tough Math Puzzle 解析(線段樹、數論)
  • 原文地址:https://www.cnblogs.com/Jiazexin/p/7080340.html
Copyright © 2011-2022 走看看