由于最开始是先接触Python的中面向对象,继承的语法以及思路开始的。之后当接触到了JavaScript的的面向对象语法时是觉得有些别捏的。JS本身是不提供class的实现的,而是基于原型链。
面向对象
1 | function People(name){ |
当new一个函数时发生了三件事情
- 创建了一个空对象,把空对象的proto属性指向People.prototype
- 执行People函数,函数中的this代表这个刚创建的新对象
- 返回这个对象
对于第三步,如果构造函数中有return,分情况讨论。如果return的是基本类型,会忽略不计。如果return的是引用类型,则返回这个引用类型
原型图
Tips
任何函数都有.prototype这个属性,对应的值叫做原型对象,这个原型对象可以由被这个函数new的所有对象共享
继承
1 | function Dialog(target){ |
Dialog.call(this, target)的作用是: 执行函数 Dialog(target),执行的过程中里面遇到 this 换成当前传递的 this
Object.create(Dialog.prototype)的作用是:创建一个空对象,空对象的proto等于 Dialog.prototype