jsp网站建设美食,皮皮果网站建设,传奇网站怎么建设,dw网站制作原型与原型链
要讨论原型与原型链#xff0c;就要先了解什么是 构造函数 #xff0c;构造函数与普通函数没有太大的区别#xff0c;使用 new关键字 创建实例对象的函数#xff0c;就叫做构造函数。
在js中#xff0c;每一个函数类型的数据都有一个 .prototype 的属性就要先了解什么是 构造函数 构造函数与普通函数没有太大的区别使用 new关键字 创建实例对象的函数就叫做构造函数。
在js中每一个函数类型的数据都有一个 .prototype 的属性这个属性指向一个对象叫做 原型对象 。
原型对象有一个属性叫做 constructor 的属性指向他的 构造函数 。
在使用构造函数构造不同的实例对象时有些 属性 和 方法 是相同的如果每个实例对象都创建这些相同的属性有些浪费可以存在原型对象里以共享。这也是原型对象最重要的作用。
对于这些共有的属性和方法实例对象可以直接用 点运算符 访问原因是实例对象在本身找不到对应的属性和方法时会查找其构造函数的原型对象。所以可以用 实例.constructor 来查看该实例的构造函数。
如果实例本身没有该属性和方法其构造函数的原型对象也没有会继续往原型对象上去寻找原型链概念就呼之欲出了。
先了解 显式原型 和 隐式原型
显式原型 是用 prototype 属性查找原型是函数类型数据的属性函数可以用这个方法构造函数也可以用找到的是这个构造函数的原型对象。
隐式原型 是用 proto 属性查找原型是对象类型数据的属性对象可以用这个方法实例对象也可以用找到的是这个实例对象的构造函数的原型对象。
原型对象 也是一个对象也有 proto 属性在js中对象的构造函数是 Object() 所以其原型对象是 Object.prototype 。
Object.prototype 也是一个对象不过 Object.prototype 比较特殊没有原型对象或者说其_proto_指向的是 null 。所以 Object.prototype 是原型链的尽头。
如果实例本身没有该属性和方法则寻找实例的原型对象如果实例的原型对象也没有则继续寻找该原型对象的原型对象直至null。这样的顺着 proto 寻找的链状结构就叫做 原型链 也叫做 隐式原型链 。
js中函数也是一种对象而函数的构造函数为 Function() 所有函数都可以看作是 Function() 的实例对象而 Function() 本身也是函数所以 Function() 是自己的实例对象。函数的 proto 是 Function.prototype 。 Function.prototype 的原型对象是 Object.prototype 。