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__这条链向上找,这就是原型链。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律