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

  

原文地址:https://www.cnblogs.com/niunai007/p/5017529.html