关于js中使用call实现继承

本文通过具体示例解析了JavaScript中构造函数、call方法的工作原理及this关键字的作用机制。阐述了如何利用call方法实现继承,并解释了构造函数内部this的含义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

call/apply网上有很多说明,但基本上都没有阐释它的实际运行机制,总是说将A的方法全部给了B,但是原因是什么,我还没看到有那篇文章说明过。说明之前首先必须要说先说明几个概念。

function ClassA(sColor) {
    this.color = sColor;
    this.sayColor = function () {
        alert(this.color);
    };
}

function ClassB(sColor, sName) {   
    ClassA.call(this, sColor);
    this.name = sName;
    this.sayName = function () {
        alert(this.name);
    };
}

var objA = new ClassA("blue");
var objB = new ClassB("red", "John");
objA.sayColor();
objB.sayColor();
objB.sayName();
在ClassA(),ClassB()中我没有写return 语句,或者你写“return 2”返回基本类型时,是默认返回this的。然后this也是一个很复杂的玩意,在这里是构造函数中的this,这种情况下,this一开始是一个空对象,原型指向ClassA()的prototype属性,实例化时this.Saycolor=function(){//do sth}给this赋值。
所以objA.sayColor()可以使用。
ClassA.call(this, sColor)可以这么理解,就是把ClassA中的this,换成(this,sColor)中的this,也即是将ClassA中this替换为ClassB的this,所以实例化ClassB时其中的this,不仅仅在ClassA中被赋值了,也在ClassB中被赋值了,即this.color=sColor;this.Saycolor=function(){}。
所以objB可以调用sayColor(),因为objB==this,这个ClassA的this又在ClassB中被赋值过。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值