js中的原型模式、原型对象、原型链 2021.11.10

前端中的“两链一包”:原型链、作用域链、闭包。

原型对象的产生由来:由一个类或者构造函数 实例化生成多个对象 他们都有相同的方法,没有必要给每个设置一份,为解决构造函数中的写方法造成的内存浪费问题,可以将他们放到一个公开的、能被共享的位置去定义 ------ 即原型对象。

js提供的原型对象 它的内容 可以被所有的实例对象继承和共享。

构造函数的prototype是它的原型对象,写进原型对象里:(一种方法是扩展,一种是重写)

 //扩展写法

此时原型对象的内容是:console.log(Rectangle.prototype);

constructor属性是用来让实例对象获取它的构造函数 。

原型扩展的方式来设置方法,灵活性很强,可以在随时随地的去扩展方法,但是维护性差,如果希

望 将方法 定义到一起 ,可以考虑使用原型(对象)【重写】

constructor 标记实例对象所属的构造函数,如果没有手动设置 它会继承Object的constructor。

“对象.constructor”常被用来严格区分“对象的类型”

原型链:原型对象其实是一个链 对象链的顶层是Object.prototype 

每个实例对象(object)都有一个隐式原型(__proto__)指向它的构造函数的原型对象(prototype )。

原型对象的__proto__指向另外的一个原型对象,都是对象,都有__proto__属性,层层向上最后找

到的顶级构造函数的原型对象是Object.prototype。(顶级构造函数的原型对象Object.prototype没

有__proto__属性,所以为null)

 

 访问查找原型的属性方法 优先级:

1)先找自身的,如果没有--2)到原型去找,再没有到--3)Object.prototype找

还是没有属性或方法的话,则返回undefined。

Guess you like

Origin blog.csdn.net/weixin_50163576/article/details/121255483