类继承与原型继承
先分别举个例子吧,首先是原型继承
1 | var proto = {"a":1,"b":{"c":2}} |
其次是类继承
1 | var proto = function(){ |
它们的区别就在于,类继承先定义了一个基类proto,在继承时,子类构造函数的prototype是根据这个基类new出来的一个对象。
这两种方式各有优劣:
正如上一篇说到的,如果执行代码
1 | t1.b.c = 12 |
对于原型继承,因为proto被改变了,所以t2.b.c也变成了12,而对于类继承则不会有问题,这对于不够熟悉js的人来说绝对是个坑。
不过原型继承实现起来比类继承要更灵活,因为不需要做抽象基类的工作,但如果随意地使用原型继承,例如用作prototype的对象是一个非常庞大复杂的对象,那显然会产生问题。
Ursprünglicher Link: http://yangguang1029.github.io/2016/11/18/js对象与继承2/
Copyright-Erklärung: 转载请注明出处.