zoukankan      html  css  js  c++  java
  • call和apply

    这两个在讲this的时候就遇到了,它们可以改变函数的上下文this,改变其指向

    两者之间唯一的区别就是传参的不同

    obj.call(thisObject,arg1,arg2....);

    obj.apply(thisObject,[arg1,arg2....]);

    如果参数已经确定,就可以直接用call就行了,如果参数是动态的,那么用apply比较合适

    例子

     1 function cat(){};
     2 cat.prototype={
     3     food:"fish",
     4     say:function(){
     5         alert("I love"+this.food);
     6    }
     7 }
     8 var newCat = new cat();
     9 newCat.say();    // I love fish
    10 
    11 var dog = {food:"bone"};
    12 newCat.say.call(dog);    //I love bone

    这边把newCat中this指向了dog。

    换个角度想一下,这算不算实现了继承呢

    1 var parent=function(){
    2    this.name="jsc";
    3    this.age = 25;
    4 }
    5 var child={};
    6 console.log(child);    //{}对象
    7 
    8 parent.call(child);
    9 console.log(child);    //{name:"jsc",age:25}

    判断变量类型时可以使用

    我们在使用typeof判断变量类型的时候,如果是array,Date等,都返回object,所以就没法判断具体是哪一种了

    这时候可以使用call

    例如

    1 var array = [];
    2 
    3 console.log(typeof array);   //  object
    4 
    5 Object.prototype.toString.call(array); //[object,array]
  • 相关阅读:
    vb.net FTP上传下载,目录操作
    vb.net导出CSV文件
    服务器内存总量
    定义数组
    监控键盘健代码
    C# FTp 上传,下载
    使用EasyUI中Tree
    微信web开发自定义分享
    mysql将时间戳格式化
    查询表时给字段赋默认值 sql
  • 原文地址:https://www.cnblogs.com/jiangshichao/p/7535408.html
Copyright © 2011-2022 走看看