分享人:芦宇
目录
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
8.更多讨论
当时JS的诞生主要是解决用户和浏览器无法互动的问题,实现一些简单的功能例如表单验证。作为脚本语言它没有子类父类的概念,但作为面对对象的编程语言它又需要实现继承,所以有了不同与JAVA,C++的继承机制,JS的继承全靠原型链来实现继承
JS考了C++和Java都是用new生成实例于是便将new引入到了JS,用来从构造函数生成一个实例对象
构造函数生成的实例无法共享属性和方法,考虑到这点于是将prototype属性引入到了JS中
这个属性包含一个对象,里面放着所有实例需要共享的方法和属性,而不需要共享的属性和方法可以放在构造函数中
实例对象一经创建,将自动引用prototype的方法和属性
由于所有的实例对象共享同一个prototype对象,那么从外界看起来,prototype对象就好像是实例对象的原型,而实例对象则好像"继承"了prototype对象一样。
拥有公用属性的对象
对象是由构造函数创建的,函数也是对象,函数是由Function创建的,对象的__proto__等于创建者的prototype
每个对象都有一个__proto__,它指向它的prototype原型对象,而prototype原型对象又具有一个自己的原型对象,就这样层层向下上直到一个对象的原型prototype为null 这个查询的路径就是原型链
如何访问一个对象的原型?
prototype,只有函数对象才拥有一个属性,用来访问其原型对象
__proto__,是任何引用类型都拥有的属性,指向其构造函数的prototype,但是并不是标准写法,是一个特殊的内部属性
Object.getPrototypeOf()该属性是ES5引入的一个标准属性,用来获取对象的原型,其作用和__proto__是一样的
尽量去修改增添,使用对象字面量创建原型方法要谨慎
https://zhuanlan.zhihu.com/p/35790971
http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javascript.html
感谢大家观看
BY : 芦宇