谈谈对JavaScript中apply方法的理解

最近学到JavaScript的apply方法,在网上查了一些资料,基本都是从apply和call的对比,以及apply的两个作用上说的,虽然这些说法并没有错,但是哈,它们似乎仍然没有告诉我们,apply到底是用来干什么的?经过一些思考与实践,我总结了apply的一点实际应用,是我个人的理解,应该不全面,但也希望可以给你们一些启发。
在我看来,apply主要有两点用处:改变this指向;重用方法,增加代码复用率。我将结合一个例子进行分析:

let person1 = {
    name: "小明",
    age: 18,
    fun: function ()
    {
        let s = "";
        s += "我叫" + this.name + ",今年" + this.age + "岁。";
        if (arguments.length !== 0)
        {
            s += "下面是我的补充个人信息:";
            for (let i = 0; i < arguments.length; i++) s += "  " + arguments[i];
        }
        console.log(s);
    }
}

let person2 = {
    name: "小红",
    age: "20"
}

let otherMsg = "我住在北京市朝阳区...";
person1.fun.apply(person2, [otherMsg]);
我叫小红,今年20岁。下面是我的补充个人信息:  我住在北京市朝阳区...

上例可见:person2对象中包含了person1对象的属性,但没有person1对象中的fun方法。而在person1的fun方法中,采用this指向当前调用对象中的属性,我们采用apply()改变将person1中this的指向改为person2,于是person1的fun方法就调用了person2的属性。此外,我们通过apply()的数组参数传入扩展属性,于是又执行了附加操作。

上述过程意味着:具有相同或类似结构的对象可以归为一类,并可以通过调用其他对象中的方法,传入本对象中的参数,实现本对象需要实现的功能

这就好比:Java中是将所有对象的共有特征抽象成类,而JavaScript中一类对象的共有特征分散在这些对象中,同类(结构相同或相似)对象可以重用和扩展这些共性(方法)

这是我对apply的一些浅薄理解,如果后续有新的想法,会再继续更新。如有错误之处,也希望好言指正。

------------------------------------------------------------分割线------------------------------------------------------------
好嘛,一个小时前才更新了apply的理解,把对象的apply和类结合起来了,一个小时后就学到了JavaScript的原型和类。那就再补充一点把。
JavaScript中类继承的概念其实类似于C的指针,它是一环链接一环的,不论是apply改变this指向,还是__proto__指向原型对象,抑或者class的继承,本质上都是类似的。只不过apply是重用它指向对象的方法,而__proto__和class重用了它指向对象的所有属性和方法。
希望能给你们有所启发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值