阅读 8

原型

prototype

每一个创建的函数,解析器都会向函数中添加一个属性prototype,这个属性指向一个对象,这个对象就是我们所谓的原型对象

__proto__

JS 在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做 __proto__ 的内置属性,用于指向创建它的构造函数的原型对象。

原型对象

原型对象就相当于一个公共区域,所有同一个类的实例都可以访问到这个原型对象,我们可以将对象中公共的内容,统一设置到原型对象中,其中方法一般定义在原型中,属性一般通过构造函数定义在对象本身上,这样避免了在全局中使用函数,避免了不安全性,举例!

Image.png

这张图能简单描述函数,prototype,实例对象,__proto__与原型对象之间的关系 Image.png

原型链

原型对象也是对象,所有它也有原型

实例对象与原型之间的连接,叫做原型链,当我们访问对象的一个属性或者方法时,它会先在对象自身中寻找,如果有则直接使用,如果没有就会去原型对象中寻找,如果找到则直接使用,如果原型对象中还是没有,就会去原型对象的原型中寻找,直到找到Object对象原型,Object对象原型没有原型,它这里就是尽头了,所以Object中没有找到,就返回undefined,下面这两张图能具体的描述函数,prototype,实例对象,__proto__与原型对象之间的关系

Image.png 所有函数的隐式原型都是一样的(它们都是new Function产生的,类似new Object和new Array)

Image.png

值得注意的是,读取对象的属性值时,会自动到原型链中寻找设置对象的属性值时,不会查找原型链,但如果当前自身中没有该属性则直接添加属性并设置其值

原型继承方法

子元素的原型对象等于父元素的实例对象,即可通过父元素的__proto__获取到父元素的原型对象上的方法,记得要让子元素的constructor属性指回子元素的原型对象,举例!

function Father(){}
function Son(){}
Son.prototype=new Father()
Son.prototype.constructor=Son
复制代码
文章分类
前端
文章标签