大家好,js继承是js中比较重要的的一部分,这篇文章来介绍js中的继承。
常用的三种继承
- 构造函数继承
- call & apply 继承
- prototype继承
js继承有挺多变种,常用就这三种
讲继承前,先讲讲new实例化过程中,在内存中的三个阶段
new实例化,在内存中的三个阶段
// 实例化
function Foo(){}
var _f = new Foo();
// 内存中三个阶段
// 1)创建对象
var _f = {};
// 2)更改 __proto__指向
_f.__proto__ = Foo.prototype;
// 3)更改this指向
Foo.call(_f);
这是内存中实例化的三个阶段,除了第一步创建对象,咱们可以看出,实例化对象,本质上还是在操作prototype
和this
理解了内存的三个阶段,就能很好理解继承了,
继承本质上也是在操作prototype
和this
js继承简单总结
function Axx( ){ this.a = 1; }
Axx.prototype.foo = function (){ };
// 1、原型继承 ( prototype继承的核心,就是原型链 )
Bxx.prototype = new Axx();
// 2、构造函数继承 - 在子类函数中用一个属性指向父类 这样就继承了原型上方法
function Children() {
this.obj = ParentFn; // 这样继承了ParentFn 原形上方法 (注意不能加括号,那是把父类执行结果给子类了)
this.obj(); // 这样继承了ParentFn this上方法
}
// 3、call和apply继承
function Bxx(){
Axx.call(this);
}
new Bxx(); // 这样就继承了
上面就是简单实现继承了,是不是很简单呢😄!
原型链我上一篇文章讲了,这里就不在赘述;原型链看这
再来总结下,js继承的核心,
就是this指向的改变,扩展了子类的this指向,使之包含了父类的this
继承总结
就两点,继承prototype
原型上共有方法 和this
上私有方法,搞清楚了这点,学习继承就不难了,
基本理论也说完了,之后我看出几篇prototype
和继承的实际应用,继承的简单原理就说到这里了,有啥错漏的欢迎评论指出,共同学习
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。