JS原型、原型链深入理解

2023-05-28 0 544

蓝本是JavaScript中两个较为难认知的基本概念,蓝本有关的特性也较为多,第一类有”prototype”特性,表达式第一类有”prototype”特性,蓝本第一类有”constructor”特性。

一、贝唐蓝本

在JavaScript中,蓝本也是两个第一类,透过蓝本能同时实现第一类的特性承继,JavaScript的第一类中都包涵了两个”[[Prototype]]”外部特性,那个特性所有关联的是该第一类的蓝本。

“[[Prototype]]”做为第一类的外部特性,是无法被间接出访的。因此为的是方便快捷查阅两个第一类的蓝本,Firefox和Chrome中提供更多了__proto__那个冗余(并非大部份应用程序都全力支持)的出访器(ECMA引入了国际标准第一类蓝本出访器”Object.getPrototype(object)”)。在JavaScript的蓝本第一类中,还包涵两个”constructor”特性,那个特性有关联建立大部份对准该蓝本的示例的构造表达式

二、准则

在JavaScript中,每一表达式都有两个prototype特性,当两个表达式被用于构造表达式来建立示例时,那个表达式的prototype特性值会被做为蓝本表达式给大部份第一类示例(也是增设示例的`__proto__`特性),也是说,大部份示例的蓝本提及的是表达式的prototype特性。(****`多于表达式第一类才会有那个特性!`****)

new 的操作过程分成两步:

var p = new Person(李四,20);

1. var p={}; 调用两个第一类p。

2. p._proto_=Person.prototype;,将第一类p的 __proto__ 特性增设为 Person.prototype

3. Person.call(p,”李四”,20);调用构造表达式Person来调用p。

三、贝唐Object

Object第一类本身是两个表达式第一类。

既然是Object表达式,就肯定会有prototype特性,因此能看到”Object.prototype”的值是”Object{}”那个蓝本第一类。反过来,当出访”Object.prototype”第一类的”constructor”那个特性的时候,就得到了Obejct表达式。

四、贝唐Function

如上面例子中的构造表达式,JavaScript中表达式也是第一类,因此就能透过_proto_查找到构造表达式第一类的蓝本。

Function第一类做为两个表达式,就会有prototype特性,该特性将有关联”function () {}”第一类。

Function第一类做为两个第一类,就有__proto__特性,该特性有关联”Function.prototype”,也是说,”Function._proto_ === Function.prototype”。

如若转载,请注明出处:开源字节

https://sourcebyte.cn/article/149.html

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务