Ո՞րն է տարբերությունը «__proto__» - ի և «նախատիպի» միջև:


պատասխանել 1:

ոչ

  • __proto__- ը փաստացի նախատիպն է, բայց չօգտագործեք այն .. կոնստրուկտոր: նախատիպը պետք է անի նույնը, ինչ __proto__, բայց հիմնականում կոտրված է: Ֆունկցիայի նախատիպը իրականում ստեղծում է իրերի նախատիպը, ոչ թե դրա նախատիպը:

Նախատիպ

.__ պրոտո__

__պատոտ__

__պատոտ__

իրականում է

Նոր

.Պրոտոտիպ

Ֆունկցիոնալ նախատիպ

__պատոտ__

.constructor.prototype

Դիզայն

Օբեկտ.isPrototypeOf

Օբեկտ.getPrototypeOf


պատասխանել 2:

JavaScript- ի օբյեկտի ծրագրավորումը կոչվում է «նախատիպի հիման վրա»

Ժառանգված API- ը սահմանելու համար ստեղծեք նախատիպային օբյեկտ `մեթոդներով և հնարավոր է նաև որոշակի կանխադրված արժեքներ հատկությունների համար:

Բոլոր «Ֆունկցիաներ» դեպքերը (գործառույթները JavaScript- ի օբյեկտներ են) ունեն լռելյայն `նախատիպային գույք, ըստ լռելյայն, որը կարող է ընդլայնվել կամ փոխարինվել: Երբ այս գործառույթը կոչվում է որպես «կառուցապատող» «նոր» օպերատոր, այս «նախատիպ» գույքը դառնում է այն ատեստների ներքին «[նախատիպը» սեփականությունը, որից որոնվում են նրա ժառանգած API- ները:

Այս նախատիպը կարող է սահմանվել նաև որպես պարզ նոր օբյեկտ և ձեռքով ներարկվել.

  • Գործող օբյեկտի համար Object.setPrototypeOf- ի միջոցով (), որն օգտագործվում է առանց կոնստրուկտորի գործառույթի միջոցով Object.create () միջոցով, վերաշարադրել ֆունկցիայի հիմնական գործառույթի նախատիպը բառացի ազդեցության, Object.assign () կամ Object.defineProperty () միջոցով:

Օբյակի ներքին [նախատիպը] պաշտոնապես հասանելի չէր երկար ժամանակ վերանայման կամ փոփոխման համար: Մեկ եղանակ էր ստուգել օբյեկտի ժառանգած կոնստրուկտորի ունեցվածքը, բայց այն հեշտությամբ կարելի էր շրջանցել:

Mozilla- ն այնուհետև ներկայացրեց ոչ պաշտոնական __proto __ օգնականը:

Այնուհետև TC39- ը (ECMAScript աշխատանքային խումբ) սահմանեց պաշտոնական API setPrototypeOf () / getPrototypeOf ():

Այնուհետև TC39 վավերացրեց __proto__ API- ն