一、.什么是原型,什么是原型链?以及原型对象的constructor
属性
《JavaScript教程-网道》
https://wangdoc.com/javascript/oop/prototype.html
1.原型
原型对象的所有属性和方法,都能被实例对象共享。也就是说,如果属性和方法定义在原型上,那么所有实例对象就能共享,不仅节省了内存,还体现了实例对象之间的联系。
JavaScript 规定,每个函数都有一个prototype
属性,指向一个对象。
对于普通函数来说,该属性基本无用。但是,对于构造函数来说,生成实例的时候,该属性会自动成为实例对象的原型。
原型对象的属性不是实例对象自身的属性。只要修改原型对象,变动就立刻会体现在所有实例对象上。
当实例对象本身没有某个属性或方法的时候,它会到原型对象去寻找该属性或方法。这就是原型对象的特殊之处。
如果实例对象自身就有某个属性或方法,它就不会再去原型对象寻找这个属性或方法。
总结一下,原型对象的作用,就是定义所有实例对象共享的属性和方法。这也是它被称为原型对象的原因,而实例对象可以视作从原型对象衍生出来的子对象。
2.原型链
JavaScript 规定,所有对象都有自己的原型对象(prototype)。一方面,任何一个对象,都可以充当其他对象的原型;另一方面,由于原型对象也是对象,所以它也有自己的原型。因此,就会形成一个“原型链”(prototype chain):对象到原型,再到原型的原型……
如果一层层地上溯,所有对象的原型最终都可以上溯到Object.prototype
,即Object
构造函数的prototype
属性。也就是说,所有对象都继承了Object.prototype
的属性。这就是所有对象都有valueOf
和toString
方法的原因,因为这是从Object.prototype
继承的。
那么,Object.prototype
对象有没有它的原型呢?回答是Object.prototype
的原型是null
。null
没有任何属性和方法,也没有自己的原型。因此,原型链的尽头就是null
。
3.原型对象的constructor
属性
prototype
对象有一个constructor
属性,默认指向prototype
对象所在的构造函数。constructor
属性的作用是,可以得知某个实例对象,到底是哪一个构造函数产生的。
另一方面,有了constructor
属性,就可以从一个实例对象新建另一个实例。
constructor
属性表示原型对象与构造函数之间的关联关系,如果修改了原型对象,一般会同时修改constructor
属性,防止引用的时候出错。
修改原型对象时,一般要同时修改constructor
属性的指向。
二、继承
构造函数的继承
让一个构造函数继承另一个构造函数,是非常常见的需求。这可以分成两步实现。
第一步是在子类的构造函数中,调用父类的构造函数。
第二步,是让子类的原型指向父类的原型,这样子类就可以继承父类原型。
招银电面前端
链接:https://www.nowcoder.com/discuss/287857?type=all&order=time&pos=&page=0
1.自我介绍
2.说下自己的项目
3.vue的双向数据绑定
4.深浅拷贝
5.事件委托冒泡
6.闭包
7.继承
8.原型链
9.设计模式
10.cookie、session、localStorage、sessionStorage之不同
原文地址:https://www.cnblogs.com/songsongblue/p/11601091.html