学习js也有将近两年时间了吧,回头想想真的是犯了很多错。太急躁,太急功近利了。这不最近只能亡羊补牢了。重新好好的,一点一点的复习了js的知识点。公司天天加班,但是回来研究源生js感觉就像做按摩一样放松,这两天把面向对象的创建对像和继承学习了下。下面做个总结。希望大家批评指导啊。
首先说到继承:我们为什么要实现继承?我个人认为1,减少代码,相同功能写一遍就好了,然后让子类继承就好了。2,方便维护,如果我要修改某个功能的实现方法,只在最高的那个父类修改了,其他类会随之修改。我们可以发现js的中的系统的一些类就是这样做的。那么我们来一块看看寄生组合继承的实现原理,
类A作为父类,类B作为子类。--我们利用call使B继承A的私有方法,让B的原型等于A的原型,然后让B的原型的构造函数为B
//给Object类的原型上增加一个兼容非标准浏览器的exCreate方法,实现和create方法一样的功能
Object.prototype.exCreate = function (obj) {
function fn() {
};
fn.prototype = obj;
return new fn();
}
//类A
function A() {
this.x = 100;
}
A.prototype.getX = function () {
console.log(this.x);
}
//类B
function B() {
//实现继承类A的私有属性
A.call(this);
}
//实现类B的原型为类A的原型并且利用constructor使原型的构造函数为B
B.prototype = Object.exCreate(A.prototype);
B.prototype.constructor = B;
var c = new B();
console.log(c);
这个时候我们会发现,B已经继承A的一些属性和方法并且B的第一层 __proto__上可以增加新的原型方法,切不会影响第二层__protp__即A上的方法getX()
当我们修改A的原型上的getX时,B上也同样修改了。