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

    权威指南上的说法是:可以将call 和apply看做是某个对象的方法,通过调用方法的形式

    间接调用函数;需要重点说明是 :通过call和apply 调用的 函数:具体用法---》如下:

    1.先说call的用法,call可以接收两个参数,也可能不是两个;第一个参数是要调用函数的

    母对象,在函数体内通过this来获得对它的引用;

    function a(){
    console.log(this); // 输出函数a中的this对象
    }

    function b(){} // 定义函数b
    var obj = {name:'onepixel'}; //定义对象obj

    //调用
    a();//this代表window对象;
    a.call;//本身是一个函数方法//window
    console.log(a.call); //function call() { [native code] };
    a.call(null); //window 传入null,函数中的this,指向window
    a.call(undefined);//window 传入undefined,函数中的this,指向window
    a.call(1); //Number 传入数值型,this指向对应的包装类型,Number
    a.call(''); //String 传入字符串,this指向string 类型
    a.call(true); //Boolean 传入布尔类型,this指向Boolean类型
    a.call(b);//function b(){}
    a.call(obj); //Object 指向obj;
    //call的用法;

    可以看到call()中第一个参数出入什么样的参数,this 就指向对应的包装类型;

    不传参,或者参数为null,undefined 时,this指向window;

    具体用法:

    //call的用法;
    var m = {
      name:'onepixel',
        say:function(){
        console.log('hi,i am function m!');
        },
      }

      function n(name){
        console.log('post params:'+name);
        console.log('i am '+this.name);
        this.say;
      }
    n.call(m,'test');//post params:test
    // i am onepixel
    //I'm function a! 不知道为什么没有调用;

    也就是说n可以通过call来调用M 中的方法; 
    //关于appply
    //apply和call的唯一区别是第二个参数的传递方式不同,
    //apply的第二个参数必须是一个数组,而call允许传递一个参数列表
    //值得你注意的是,虽然apply接收的是一个参数数组,但在传递给调用函数时,
    //却是以参数列表的形式传递

    function f(x,y,z){
    console.log(x,y,z)
    }
    f.apply(undefined,[1,2,3]);//1,2,3

    //第一个参数传null或undedined指向window
    重点://js中么有继承的概念,call和apply却可以实现;

    function Animal(name,weight){
        this.name = name;
        this.weight = weight;
      }
    function Cat(){
        Animal.call(this,'cat','50');
        //Animal.apply(this,['cat','50']);
        this.say = function(){
        console.log('i am '+this.name+'myweight'+this.weight)
        }

      }

    var cat = new Cat();
    cat.say();

    这段代码自己理解一下。。。。

  • 相关阅读:
    前端开发 Vue -3axios
    前端开发 Vue -2npm
    前端开发 Vue -1windows环境搭建Vue Node开发环境
    前端开发 Vue -0前言
    linux
    java 框架-缓冲-Redis 2Jedis操作
    java 框架-缓冲-Redis 1概述
    微软银光 silverlight简介
    bs模型与cs模型
    安装vs2010
  • 原文地址:https://www.cnblogs.com/vali/p/5651782.html
Copyright © 2011-2022 走看看