zoukankan      html  css  js  c++  java
  • JavaScript学习笔记(1))——————call,apply方法

      学习前端也有一段时间了,但是效果甚微。利用时间不够充分,虽然是利用工作之余来学习。但是这不能成为我的借口。

    今天学习了(其实看了很多遍)call apply方法。

    function abc(a,b){
        return a + b;
    }
    
    function call1(num1,num2){
        return abc.call(this,num1,num2); //call方法传递的参数方式为一个一个传递
    }
    
    function apply1(num1,num2){
        return abc.apply(this,[num1,num2]);//这里appl方法传递的参数需要是一个数组,在不确定传递
                                           //的数量的时候,传递arguments是很方便的。
    }
    
    //作用(1):调用函数
    
    call1(10,20);    //30
    apply1(10,20);    //30
    
    
    //作用(2):扩充作用域
    window.color ='red';
    //color ='red'  这样也可以,不过带window开头更利于理解
    
    //定义一个obj对象
    var obj = {
        color:'blue'
    }
    
    var obj2 = {
        color:'green'
    }
    
    function sayColor(){
        console.log(this.color);
    }
    
    sayColor.call(this);    //'red'//在非严格模式下this===window
    sayColor.call(window);    //'red'
    sayColor.apply(this);    //'red'
    sayColor.apply(window);    //'red' //在不带第二参数时,call,apply使用无区别
    
    sayColor.call(obj); //'blue'
    sayColor.apply(obj);//'blue'
    
    //call,apply能做到很好的解耦
    
    sayColor.call(obj2); //'green'
    sayColor.apply(obj2);//'green'
    
    //(3)在构造函数继承的使用,用来继承属性
    
    function M(x,y){
        this.x = x;
        this.y = y;
        return this.x + this.y;
    }
    
    function Mchild(a,b,c){
        M.call(this,a,b);
        this.c = c;
    }
    
    var m1 = new Mchild(10,20,30);
    console.log(m1.x); //10
    console.log(m1.y); //20
    console.log(m1.c); //30

      

  • 相关阅读:
    远程、标签
    NUnit单元测试资料汇总
    jdk1.6下载页面
    javac: cannot execute binary file
    how to remove MouseListener / ActionListener on a JTextField
    Linux下chkconfig命令详解(转)
    如何让vnc控制由默认的twm界面改为gnome?(转)
    winzip15.0注冊码
    微服务的优缺点
    站点建设10个最好的响应的HTML5滑块插件
  • 原文地址:https://www.cnblogs.com/niunai007/p/5017529.html
Copyright © 2011-2022 走看看