JavaScript继承

继承—通过原型

1.共同

function A() {}
function B() {}

const g = {
  a: 1,
  b: 2,
};

我想让从A、B构造出来的对象都具有g其中的属性,就可以通过继承

A.prototype = g
A.prototype.constructor = A
console.log(A.prototype)//{ a: 1, b: 2, constructor: [Function: Man] }

const aa = new A()
console.log(aa.a)//1
console.log(aa.b)//2

const bb = new B()
console.log(bb.a)//1
console.log(bb.b)//2

这样我就达到目标了。

2.不同

有公共属性就有各自对应的属性,我如果只给A添加属性呢

A.prototype.c = 1

console.log(A.prototype)//{ a: 1, b: 2, constructor: [Function: B], c: 1 }
console.log(B.prototype)//{ a: 1, b: 2, constructor: [Function: B], c: 1 }

可以发现,我想让从A创造的对象都具有c = 1这一属性,但是它竟然给B也加上了,为什么呢?

因为A.prototype和B.prototype指向的同一个地址,给A.prototype添加一个属性,B同样能找到它

//将A和B再向上提取出一个等级,A、B都指向它  
function Word(){
    this.a = 1
    this.b = 2
}

//new Word()出来的对象,有了初始值  
还记得new的执行过程吗:
1.new fn(),创建一个对象;
2.this指向新的对象;
3.执行构造函数的代码,修改值;
4.obj形成。

console.log(new Word());//Word { a: 1, b: 2 }
console.log(new Word().constructor);//[Function: Word]

*JS的继承是通过prototype来传递的,那么只要让AB的prototype指向任意一个由Word生出来的对象就可以继承Word中的值*

function A(){}
A.prototype = new Word()
A.prototype.constructor = A

function B(){}
B.prototype = new Word()
B.prototype.constructor = B

A.prototype.c = 3

const aa = new A()
console.log(aa.__proto__);//Word { a: 1, b: 2, constructor: [Function: A], c: 3 }

const bb = new B()
console.log(bb.__proto__);//Word { a: 1, b: 2, constructor: [Function: B] }

原型链是什么?

访问一个对象的属性时,先在基本属性中查找,如果没有,再沿着__proto__这条链向上找,这就是原型链。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

️Dou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值