Loading...

глобалдык объект

глобалдык объект

 

Глобалдык объект программанын каалаган жеринде жеткиликтүү болгон өзгөрмөлөрдү жана функцияларды камсыз кылат. Демейки боюнча, булар тилге же иштөө убактысына орнотулгандар.

Браузерде ал window, Node.jsде - деп аталат global, башка иштөө убакытында башкача атоого болот.

Жакында globalThisтилге глобалдык объекттин стандартташтырылган аты катары кошулган, ал ар кандай чөйрөдө колдоого алынышы керек. Бул бардык негизги браузерлерде колдоого алынат.

Төмөндө биз windowчөйрөбүздү браузер деп эсептеп, колдонобуз. Эгер скрипт башка чөйрөдө иштетилсе, globalThis.

Глобалдык объекттин бардык касиеттерине түздөн-түз кирүүгө болот:

@A@alert("Привет");
// это то же самое, что и
window.alert("Привет");@A@

Браузерде varlet/const! эмес) менен жарыяланган глобалдык функциялар жана өзгөрмөлөр глобалдык объектинин касиетине айланат:

@A@var gVar = 5;

alert(window.gVar); // 5 (становится свойством глобального объекта)@A@

Ушул эле нерсе Функция декларациясынын синтаксиси аркылуу жарыяланган функцияларга да тиешелүү ( functionФункция туюнтмалары эмес, негизги код агымындагы ачкыч сөз туюнтмалары)

Сураныч, ага ишенбеңиз. Бул жүрүм-турум шайкештик үчүн колдоого алынат. JavaScript модулдарын колдонгон заманбап долбоорлордо мындай болбойт.

Эгерде биз менен өзгөрмө жарыялаган болсок let, анда мындай болмок эмес:

@A@let gLet = 5;

alert(window.gLet); // undefined (не становится свойством глобального объекта)@A@

Эгер мулк ушунчалык маанилүү болсо, аны бүткүл программага жеткиликтүү кылууну кааласаңыз, аны глобалдык объектке түз жазыңыз:

@A@// сделать информацию о текущем пользователе глобальной, для предоставления доступа всем скриптам
window.currentUser = {
  name: "John"
};

// где угодно в коде
alert(currentUser.name); // John

// или, если у нас есть локальная переменная с именем "currentUser",
// получим её из window явно (безопасно!)
alert(window.currentUser.name); // John@A@

Бирок, жалпысынан глобалдык өзгөрмөлөрдү колдонуу сунушталбайт. Аларды мүмкүн болушунча аз колдонуу керек. Функция киргизүү параметрлерин кабыл алып, белгилүү бир натыйжаны чыгарган коддун дизайны тышкы, андан да глобалдуу өзгөрмөлөр колдонулганга караганда таза, ишенимдүү жана тестирлөө үчүн ыңгайлуу.

Полифилдер үчүн колдонуңуз

Глобалдык объект заманбап тил өзгөчөлүктөрүн колдоону текшерүү үчүн колдонулушу мүмкүн.

Мисалы, орнотулган объекттин бар-жоктугун текшерүү үчүн Promise(мындай колдоо абдан эски браузерлерде жок):

@A@if (!window.Promise) {
  alert("Ваш браузер очень старый!");
}@A@

Эгерде жок болсо (айталы, эски браузер колдонулат), биз политолтуру түзө алабыз: чөйрө колдоого албаган, бирок заманбап стандартта бар функцияларды кошобуз.

@A@if (!window.Promise) {
  window.Promise = ... // собственная реализация современной возможности языка
}@A@

Бардыгы

  • Глобалдык объект программанын каалаган жеринде жеткиликтүү болушу керек болгон өзгөрмөлөрдү сактайт.

    Бул сыяктуу орнотулган объекттерди жана серепчи терезесинин бийиктиги Arrayсыяктуу чөйрөгө тиешелүү касиеттерди да камтыйт.window.innerHeight

  • Глобалдык объекттин жалпы аталышы бар - globalThis.

    window…Бирок көбүнчө (браузер) жана global(Node.js) өңдүү чөйрөгө тиешелүү аталышты колдонуп, эски жол менен аталат .

  • Биз баалуулуктарды глобалдык объектте сакташыбыз керек, эгерде алар биздин долбоор үчүн чындап глобалдуу болсо. Жана аларды минималдуу кармоого аракет кыл.

  • Браузерлерде, эгерде биз модулдарды колдонбосок , глобалдык функциялар жана өзгөрмөлөр varглобалдык объекттин касиетине айланат.

  • Келечекте кодду жөнөкөй жана оңой сактоо үчүн глобалдык объекттин касиеттерине түздөн-түз кирүү керек, мисалы window.x.