Scope ng Object ng ECMAScript
- Nasunod na Pahina Uri ng Bagay
- Susunod na Pahina Tukuyin ang uri ng klase o bagay
Ang sakop ay nangangahulugan ng sakop ng variable.
Pangpangasiwaan, pribado at proteksyong sakop
Konsepto
Sa tradisyonal na programadong orientado sa bagay, ang pwersa ay nakatuon sa pangpangasiwaan at pribadong sakop. Ang mga katangian ng pangpangasiwaan ng bagay ay puwedeng akses mula sa labas ng bagay, ibig sabihin, kapag nilikha ng developer ang isang instance ng bagay, puwedeng gamitin niya ang kanyang pangpangasiwaan. Ang mga katangian sa pribadong sakop lamang puwedeng akses mula sa loob ng bagay, ibig sabihin, para sa labas ng mundo, ang mga katangian na ito ay wala. Ibig sabihin, kung ang klase ay nagtayo ng pribadong katangian at mga paraan, ang mga anak na klase ay hindi puwedeng aksesin ang mga katangian at mga paraan na ito.
Ang sakop ng proteksyon ay ginagamit din upang tukuyin ang mga pribadong katangian at mga paraan, ngunit ang mga katangian at mga paraan ay maaring akses ng mga anak na klase.
Ang ECMAScript ay mayroon lamang isang pangpangasiwaan
Ang pagtalakay sa ECMAScript tungkol sa mga usaping ito ay halos walang kahulugan, dahil sa ECMAScript mayroon lamang isang sakop - pangpangasiwaan. Lahat ng mga katangian at mga paraan ng lahat ng mga bagay sa ECMAScript ay pangpangasiwaan. Kaya, kapag tinatayo ng iyong klase at bagay, dapat kang maging mabuti. Laging alam mo, lahat ng katangian at mga paraan ay kasalukuyang pangpangasiwaan!
Mga rekomendadong solusyon
Maraming developer ang nagturo ng mga epektibong patern ng sakop ng katangian sa internet, na naiwasan ang ganitong problema ng ECMAScript.
Dahil sa kakulangan ng pribadong sakop, nagpasya ang developer ng isang patakaran, na sinasabi kung aling katangian at mga paraan na dapat ituring na pribado. Ang patakaran ay nangangahulugan na magdagdag ng barya sa harap at likod ng katangian:
obj._color_ = "blue";
Sa ganitong code, ang katangian na color ay pribado. Tingnan mo, ang barya na _wala sa kahulugan_ ay hindi nagbabago sa katangian na pangpangasiwaan ng pangkalalakihan, ito ay lamang nagsasabi sa ibang developer na dapat ituring ang katangian na pribado.
Mayroon pang mga developer na gustong gamitin ang single underscore upang ipakita ang private member, halimbawa: obj._color.
Static scope
Ang static scope ay nagtatalaga ng attribute at method na puwedeng ma-access anumang oras mula sa parehong lokasyon. Sa Java, ang klase ay mayroon pang attribute at method, hindi kailangan ng pagkakabuo ng object ng klase para makapasok sa mga attribute at method, halimbawa ang klase na java.net.URLEncoder, ang function na encode() ay static method.
Wala ang static scope sa ECMAScript
Tignan mo, ang ECMAScript ay walang static scope. Gayunman, ito ay makakapagbigay ng attribute at method sa constructor. Paalala, ang constructor ay function lamang. Ang function ay object, at ang object ay mayroon pang attribute at method. Halimbawa:
function sayHello() { alert("hello"); } sayHello.alternate = function() { alert("hi"); } sayHello(); // maglulista ng "hello" sayHello.alternate(); // maglulista ng "hi"
Dito, ang method na alternate() ay talagang method ng function na sayHello. Puwedeng itawag na sayHello() bilang regular na function upang maglulista ng "hello", o puwedeng itawag na sayHello.alternate() upang maglulista ng "hi". Kahit ganito, ang alternate() ay method ng sayHello() sa public scope, hindi ng static method.
Keyword na this
Funcyon ng this
Ang isa sa pinakamahalagang konsepto sa ECMAScript ay ang paggamit ng keyword na this, na ginagamit sa mga method ng object. Ang keyword na this ay palaging sumusunod sa object na tinatawagang tinatawagang method, halimbawa:
var oCar = new Object; oCar.color = "red"; oCar.showColor = function() { alert(this.color); }; oCar.showColor(); // maglulista ng "red"
Sa itaas na code, ang keyword na this ay ginamit sa method na showColor() ng object. Sa kapagkakaroon na kapaligiran, ang this ay katumbas ng oCar. Ang sumusunod na code ay magkakatugma sa itaas na code:
var oCar = new Object; oCar.color = "red"; oCar.showColor = function() { alert(oCar.color); }; oCar.showColor(); // maglulista ng "red"
Sakit ng paggamit ng this
Bakit gamit ang this? Dahil sa pagkakataon na sa pagkakabuo ng object, hindi sigurado ang pangalan ng variable na gagamitin ng developer. Gamit ang this, puwedeng gamitin ang parehong function sa maraming lugar. Isipin mo ang sumusunod na halimbawa:
function showColor() { alert(this.color); }; var oCar1 = new Object; oCar1.color = "red"; oCar1.showColor = showColor; var oCar2 = new Object; oCar2.color = "blue"; oCar2.showColor = showColor; oCar1.showColor(); //Magpapakita ng "red" oCar2.showColor(); //Magpapakita ng "blue"
Sa itinatanging kodigo sa itaas, unang tinukoy ng this ang function na showColor(), pagkatapos ay nilikha ang dalawang bagay (oCar1 at oCar2), kung saan ang katangian na color ng isa ay naitala bilang "red", at ang katangian na color ng isa ay naitala bilang "blue". Ang dalawang bagay ay binigyan ng katangian na showColor, na tumutukoy sa orihinal na function na showColor() (pansin na walang problema sa pangalang kodigo, sapagkat isa ay global function at ang isa ay katangian ng bagay). Pagtawag sa showColor() ng bawat bagay, ang output ng oCar1 ay "red", at ang output ng oCar2 ay "blue". Ito ay dahil sa pagtawag sa oCar1.showColor(), ang palatandaan na this sa function ay katumbas ng oCar1. Pagtawag sa oCar2.showColor(), ang palatandaan na this sa function ay katumbas ng oCar2.
Pansin, dapat gamitin ang palatandaan na this para sa pagtutukoy ng mga katangian ng bagay. Halimbawa, kung magamit ang mga sumusunod na kodigo, ang method na showColor() ay hindi makakapatuloy:
function showColor() { alert(color); };
Kung hindi magamit ang bagay o this na palatandaan para sa variable, ang ECMAScript ay ituturing ito bilang lokal o pangkalahatang variable. Pagkatapos, ang function ay maghahanap ng lokal o pangkalahatang variable na may pangalang color, ngunit hindi makakita. Ano ang magiging resulta? Ang function ay magpapakita ng "null" sa babala.
- Nasunod na Pahina Uri ng Bagay
- Susunod na Pahina Tukuyin ang uri ng klase o bagay