Esiteks tuleb öelda, et selle punkti ei saa määrata siis, kui funktsioon on defineeritud, vaid ainult siis, kui funktsioon on täidetud, saab kindlaks teha, kellele see osutab; tegelikult on selle lõplik punkt objekt, mis seda kutsub (selle lausega on mõned probleemid ja hiljem selgitatakse, miks probleem on, kuigi enamik interneti artikleid ütleb seda, kuigi paljudel juhtudel pole selle mõistmisega probleemi, kuid tegelikult on see arusaam ebatäpne, Kui sa sellest aru saad, tekib arusaamatuse tunne), seega uurin seda teemat põhjalikult.
Test on järgmine:
Sellel on erinevad väärtused erinevate funktsioonide jaoks. Üldiselt on see keskkonnaobjekt, kus funktsioon töötab. Selle kasutust käsitletakse üksikasjalikult neljas olukorras.
Juhtum 1: Puhas funktsioonikutse
See on funktsiooni kõige levinum kasutusviis ning see on globaalne kutse, seega esindab see globaalset objekti. Vaata allolevat koodi, see töötab tulemusega 1.
Juhtum 2: Kutsu objekti meetodina
Funktsiooni saab nimetada ka objekti meetodiks, sel juhul viitab see vanemobjektile.
Juhtum 3 Kutse konstruktorina
Niinimetatud konstruktor on selle funktsiooni kaudu võimalik genereerida uus objekt. Selles punktis viitab see uuele objektile.
Jooksu tulemus on 1. Et näidata, et see pole praegu globaalne objekt, teeme koodis mõned muudatused:
Jooksu tulemus on 2, mis näitab, et globaalse muutuja x väärtus ei ole üldse muutunud.
Juhtum 4 taotle kõne
apply() on funktsiooni meetod, mis muudab funktsiooni kutsuvat objekti. Selle esimene parameeter esindab muudetud objekti, mis funktsiooni kutsub. Seega viitab see sellele esimesele parameetrile.
Kui apply() parameeter on tühi, kutsutakse vaikimisi globaalne objekt. Seega on jooksu tulemus 0, mis tõestab, et see viitab globaalobjektile.
Kui muudate viimase koodirea
Jooksev tulemus saab 1-ks, mis tõestab, et see esindab objekti obj.
(Lõpp)
Viide:
Hüperlingi sisselogimine on nähtav.
Hüperlingi sisselogimine on nähtav.
|