前端之JS-apply 和call的用法简介

apply与call的区别

apply接受参数数组作为对象,call接受参数列表;

利用apply将一个数组的值加入到另一个数组

var a = [1,2,3]
var b = ['ee', 'gg']
a.push.apply(a, b); // 第一个入参是push函数指向的对象,第二个入参是apply函数的参数
console.info(a);

利用apply函数可以避免一些需要循环遍历的方法

nums = [1,2,3,4,5,6,7]
var maxnum = Math.max.apply(null, nums)
var minnum = Math.min.apply(null, nums)
console.log(maxnum, minnum)

利用call函数写继承父类的方法

function Product(name, price) {
   this.name = name;
   this.price = price;
}
function Food(name, price) {
    Product.call(this, name, price); // 子类的传参覆盖父类的传参
    this.category = 'FOOD';
}
function Toy(name, price) {
    Product.call(this, name, price); //子类
    this.category = 'TOY';
}
var newToy = new Toy('flower', 12);
var newFood = new Food('tomato', 5);
console.log(newToy)
console.log(newFood)

用call方法调用一个函数不传第一个参数

严格模式下,返回undefined;

use 'strict'
var a = 'eee';
function display() {
    console.log(this.a);
}
display.call(); // Cannot read the property of 'a' of undefined

普通模式下, 可以正常返回(this默认为全局this对象)

var a = 'eee';
function display() {
    console.log(this.a);
}
display.call(); // eee

用call调用函数并改变上下文this

var a = 10;
function display() {
   console.log(this.a);
}
var obj = {
a: 111
}
display.call(obj); // 111
display() // 10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值