Junior
თუ თქვენ console.log-ში this-ს გამოიყენებთ, რა გამოვა კონსოლში?
sobes.tech AI
პასუხი AI-სგან
კონტექსტზე და JavaScript-ის მკაცრ რეჟიმზე ("use strict") დამოკიდებულია console.log-ის გამოძახების კონტექსტი.
გლობალურ კონტექსტში (ფუნქციებისა და მოდულების გარეთ):
- ნესტრიქტულ რეჟიმში (
"use strict"არ არის ან ფუნქციაში გამოაცხადებულია):thisიხელმძღვანელებს გლობალურ ობიექტზე (windowბრაუზერში,globalNode.js-ში). - მკაცრ რეჟიმში:
thisიქნებაundefined.
ფუნქციის შიგნით:
- ნესტრიქტულ რეჟიმში:
thisიხელმძღვანელებს გლობალურ ობიექტზე, თუ ფუნქცია ჩვეულებრივი ფუნქციაა (myFunction()). თუ ფუნქცია ობიექტის მეთოდია (myObject.myMethod()),thisიხელმძღვანელებს ობიექტზე (myObject). თუ ფუნქცია კონსტრუქტორად გამოიყენება (new MyClass()),thisიხელმძღვანელებს ახალ ობიექტზე. - მკაცრ რეჟიმში:
thisიქნებაundefined, თუ ფუნქცია ჩვეულებრივი ფუნქციაა. სხვა შემთხვევებში (ობიექტის მეთოდი, კონსტრუქტორი) ქცევა იგივეა, როგორც ნესტრიქტულ რეჟიმში.
სტრელკოვი ფუნქციის შიგნით (=>):
thisლექსიკურად ირჩევა გარეთ არსებული კონტექსტიდან. ეს ნიშნავს, რომ სტრელკოვი ფუნქციის შიგნითthisმნიშვნელობა იქნება იგივე, რაც გარეთ ჩვეულებრივი ფუნქციის ან გლობალურ კონტექსტში, სადაც გამოყოფილია, независимо როგორ არის მოწოდებული. სტრელკოვი ფუნქციები არ აკავშირებსthis-ს თავის კონტექსტთან.
მაგალითი:
// გლობალური კონტექსტი
console.log(this); // ბრაუზერში: Window, Node.js-ში: global (ნესტრიქტული რეჟიმი)
// ბრაუზერში: undefined, Node.js-ში: undefined (მკაცრი რეჟიმი)
// ჩვეულებრივი ფუნქცია
function showThisNonStrict() {
console.log(this);
}
showThisNonStrict(); // ბრაუზერში: Window, Node.js-ში: global
function showThisStrict() {
"use strict";
console.log(this);
}
showThisStrict(); // undefined
const myObject = {
methodNonStrict: function() {
console.log(this);
},
methodStrict: function() {
"use strict";
console.log(this);
}
};
myObject.methodNonStrict(); // myObject
myObject.methodStrict(); // myObject
// სტრელკოვი ფუნქცია
const arrowFunc = () => {
console.log(this);
};
arrowFunc(); // ბრაუზერში: Window, Node.js-ში: global (მემკვიდრეობით გარედან)
const myObjectWithArrow = {
arrowMethod: () => {
console.log(this);
}
};
myObjectWithArrow.arrowMethod(); // ბრაუზერში: Window, Node.js-ში: global (მემკვიდრეობით გამოყოფის კონტექსტიდან)