با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، در بخش های قبلی که استاندارد ECMAScript 5 را بررسی می کردیم، به ویژگی های Getter و Setters نیز تا حدودی اشاره کردیم، که در واقع از روش های دسترسی به آبجکت در جاوا اسکریپت می باشند. که اجازه ی تعریف Object Accessors در جاوا اسکریپت را می دهند، برای آشنایی بهتر با Object Accessors در جاوا اسکریپت و یا دسترسی به آبجکت در جاوا اسکریپت در ادامه ی این بخش با ما همراه باشید.
در ادامه ی این مبحث شما با انواع Object Accessors در جاوا اسکریپت آشنا خواهید شد.
در این مثال از خصوصیت lang برای دریافت مقدار از ویژگی language استفاده می شود.
1 2 3 4 5 6 7 8 9 10 11 12 | // Create an object: var person = { firstName: "John", lastName : "Doe", language : "en", get lang() { return this.language; } }; // Display data from the object using a getter: document.getElementById("demo").innerHTML = person.lang; |
در این مثال نیز از یک خصوصیت lang برای تنظیم مقدار خصوصیت language استفاده شده است :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var person = { firstName: "John", lastName : "Doe", language : "", set lang(lang) { this.language = lang; } }; // Set an object property using a setter: person.lang = "en"; // Display data from the object: document.getElementById("demo").innerHTML = person.language; |
تفاوت بین این دو در این دو مثال چیست؟
1 2 3 4 5 6 7 8 9 10 | var person = { firstName: "John", lastName : "Doe", fullName : function() { return this.firstName + " " + this.lastName; } }; // Display data from the object using a method: document.getElementById("demo").innerHTML = person.fullName(); |
1 2 3 4 5 6 7 8 9 10 | var person = { firstName: "John", lastName : "Doe", get fullName() { return this.firstName + " " + this.lastName; } }; // Display data from the object using a getter: document.getElementById("demo").innerHTML = person.fullName; |
مثال ۱- دسترسی به fullName به عنوان یک تابع: ()person.fullName .
مثال ۲- دسترسی به fullName به عنوان یک خصوصیت : person.fullName.
در نتیجه مثال دوم، سینکس ساده تری را ارائه می دهد.
جاوا اسکریپت می تواند با استفاده از getters و setters کیفیت داده ها را بهتر تامین کند.
استفاده از property lang، در این مثال، مقدار خصوصیات زبان را به صورت بزرگ نشان می دهد:
1 2 3 4 5 6 7 8 9 10 11 12 | // Create an object: var person = { firstName: "John", lastName : "Doe", language : "en", get lang() { return this.language.toUpperCase(); } }; // Display data from the object using a getter: document.getElementById("demo").innerHTML = person.lang; |
با استفاده از خصوصیت lang، در این مثال، مقدار بالایی را در خصوصیت زبان language می کند:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var person = { firstName: "John", lastName : "Doe", language : "", set lang(lang) { this.language = lang.toUpperCase(); } }; // Set an object property using a setter: person.lang = "en"; // Display data from the object: document.getElementById("demo").innerHTML = person.language; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | var obj = { counter : 0, get reset() { this.counter = 0; }, get increment() { this.counter++; }, get decrement() { this.counter--; }, set add(value) { this.counter += value; }, set subtract(value) { this.counter -= value; } }; // Play with the counter: obj.reset; obj.add = 5; obj.subtract = 1; obj.increment; obj.decrement; |
متد ()Object.defineProperty همچنین می تواند برای افزودن Getters و Setters استفاده شود:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | // Define object var obj = {counter : 0}; // Define setters Object.defineProperty(obj, "reset", { get : function () {this.counter = 0;} }); Object.defineProperty(obj, "increment", { get : function () {this.counter++;} }); Object.defineProperty(obj, "decrement", { get : function () {this.counter--;} }); Object.defineProperty(obj, "add", { set : function (value) {this.counter += value;} }); Object.defineProperty(obj, "subtract", { set : function (value) {this.counter -= value;} }); // Play with the counter: obj.reset; obj.add = 5; obj.subtract = 1; obj.increment; obj.decrement; |
Getters و Setters در مرورگر Internet Explorer 8 و نسخه های قدیمی تر از آن، پشتیبانی نمی شود :
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Yes | ۹٫۰ | Yes | Yes | Yes |
یکی از ویژگی هایی که در استاندارد ECMAScript 5 ارائه شده و سینتکس ساده تری را نسبت به برخی توابع ارائه می دهد، Getter و Setters می باشد، که کاربرد عمده ی آن ها دسترسی به آبجکت در جاوا اسکریپت می باشد، که در این بخش به آن پرداختیم.