十三(7)、面向对象之原型继承 ------ 2020-01-0
2020-01-01 本文已影响0人
自己写了自己看
1、例子:
function A (x) {
this.x = x;
}
A.prototype.getX = function () {
console.log(this.x);
}
function B (y) {
this.y = y;
}
B.prototype.getY = function () {
console.log(this.y);
}
let b1 = new B(100);
b1.y;
b1.getY();
b1.getX(); // Uncaught TypeError: b1.getX is not a function
2、实现原型继承:
function A (x) {
this.x = x;
}
A.prototype.getX = function () {
console.log(this.x);
}
function B (y) {
this.y = y;
}
// 实现原型继承
B.prototype = new A (200);
B.prototype.constructor = B;
B.prototype.getY = function () {
console.log(this.y);
}
let b1 = new B(100);
b1.y;
b1.getY();
b1.getX();
原型继承.png
3、原型继承的特点:
/**
原型继承的原理:让我们想要访问的父类中的属性和方法出现在 这个实例的原型链上;
Chlid.prototype = new parent();
Child.prototype.constructor = Child;
特点:
(1)JS中的原型继承和其他语言中的继承不太一样(其他语言中的继承一般是拷贝继承,
也就是子类继承父类时,会把父类中的属性和方法拷贝一份到子类中,供子类的实例调取使用),
它是把父类的原型放到子类实例的原型链上,实例想要调用这些方法,是基于 __proto__原型链查找
机制完成的;
(2)子类可以重写父类上的方法(这样会导致父类其他的实例也受到影响);
(3)父类改变原型指向的这个实例中的私有属性和方法及父类中公有的属性和方法,
最后都会变为子类中公有的属性和方法;
*/