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);
    
  • 相关阅读:
    awk-使用
    缓存使用
    一致性hash-java实现treemap版
    线程同步-CountDownLatch
    一致性hash算法
    linux-配置字符串-grep
    linux-查找命令-find
    linux-网络监控命令-netstat进阶
    linux-网络监控命令-netstat初级
    linux-单引号、双引号、反引号的区别。
  • 原文地址:https://www.cnblogs.com/Jiazexin/p/7080340.html
Copyright © 2011-2022 走看看