继承—通过原型
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] }
标签:Word,log,继承,JavaScript,console,constructor,new,prototype
From: https://www.cnblogs.com/doud/p/17573471.html