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来传递的,那么只要让A、B的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__这条链向上找,这就是原型链。

posted @   Dou-D  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示