call 和 apply

面试中经常会问到call 和 apply, 回答起来也是模模糊糊,今天有时间做了一下整理,希望可以自如的应付面试

//相同点 都会改变 this的指向
//apply会将数组转换成一个参数接一个参数的传递给方法
var array = [1, 2, 3, 4, 5, 7, 6];
var maxValue = Math.max.apply(null, array);
console.log(maxValue);

var list1 = ['a', 'b', 'c'];
var list2 = ['d', 'e', 'f'];
Array.prototype.push.apply(list1, list2);  //直接修改list1  将list2一个一个的push进list1
console.log(list1);


var obj1 = {
    name:'刘备'
};

var obj2 = {
    name:'曹操'
};
var getName = function(){
    alert(this.name);
};

window.name = '三国';
getName();//弹出"三国"
getName.apply(obj1);//弹出"刘备"na
getName.call(obj2);//弹出"曹操"


function Class1() {
    this.name = "class1";
    this.showNam = function () {
        alert(this.name);
    }
}

function Class2(name) {
    this.name = name;
}

var c1 = new Class1();
var c2 = new Class2('class2');
c1.showNam.call(c2);    //c2 执行 c1.showNam  alert(class2) c2 本身没有showNam 方法  执行c1 的 但是 name是c2 的



function Class3()
{
    this.showTxt = function(txt)
    {
        alert(txt);
    }
}
function Class4()
{
    Class3.call(this);
}
var c4 = new Class4();
c4.showTxt("cc");   //用call 实现继承
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值