Function.prototype.apply.call()函数调用和Reflect.apply()调用的方法

关于call()和apply()基本用法可以参阅如下两篇文章:

(1).call方法参阅JavaScript call()一章节。

(2).apply方法参阅JavaScript apply()一章节。

网上看到一段用法比较奇怪的代码,代码如下:

[JavaScript]

Function.prototype.apply.call(Math.floor, undefined, [1.75])

重新进行一下分组会更清晰:

[JavaScript]

(Function.prototype.apply).call(Math.floor, undefined, [1.75])

任何函数都是Function类的对象实例,所以Math.floor方法对象具有apply方法。

所以上面的代码可以修改等价于如下代码:

[JavaScript]

Math.floor.apply(undefined, [1.75])

上面的代码就很好理解了,就是一个普通的apply方法的应用。

即便是Math.floor对象没有apply方法,也是会转变为上面的格式,这就是call方法语法规定。

再来看一段代码实例:

[JavaScript] 运行代码

var num=Function.prototype.apply.call(function (b) { return this.a + b
}, {a:2},[1.75]) console.log(num);

例子:

function Person(name,age){
    if(this instanceof Person)
    {
        this.myname=name;
        this.age=age;
        this.sayName=function(){
            console.log(this.myname);
        }
    }else
    {
        return Person(name,age);
    }
    
}
function p(age){
    
    return new Person(this.a,age);
}
//Reflect.apply()是反射写法,他等于我们常见的Function.prototype.apply.call()
let r=Reflect.apply(p,{a:'xizo'},[29]);
r.sayName();
另一种调用方法,中间那个{a:'xizo'}undefined代替
/*
function p(name,age)
{
	return new Person(name,age);
}
let r=Reflect.apply(p,undefined,['xiao',29]);
r.sayName();
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值