جسٹاگرافک ایس5 آپرکشن

ایکمپریسکریپت 5 (2009) نئی اشیاء کی متدوں کو جاوا اسکریپٹ میں شامل کیا۔

مدیریت اشیاء

// اشیاء را با استفاده از نمونه موجود ایجاد می‌کند
Object.create()
// ویژگی‌های اشیاء را اضافه یا تغییر می‌دهد
Object.defineProperty(object, property, descriptor)
// ویژگی‌های اشیاء را اضافه یا تغییر می‌دهد
Object.defineProperties(object, descriptors)
// به ویژگی دسترسی دارد
Object.getOwnPropertyDescriptor(object, property)
// به صورت آرایه همه ویژگی‌ها را برمی‌گرداند
Object.getOwnPropertyNames(object)
// به سرچشمه دسترسی دارد
Object.getPrototypeOf(object)
// به صورت آرایه ویژگی‌های قابل شمارش را برمی‌گرداند
Object.keys(object)

محافظت از اشیاء

// از اضافه کردن ویژگی‌ها به اشیاء جلوگیری می‌کند
Object.preventExtensions(object)
// اگر ویژگی‌ها می‌توانند به اشیاء اضافه شوند، true برمی‌گرداند
Object.isExtensible(object)
// از تغییر ویژگی‌های اشیاء (نه مقدار) جلوگیری می‌کند
Object.seal(object)
// اگر اشیاء مسدود شده باشند، true برمی‌گرداند
Object.isSealed(object)
// از تغییر اشیاء جلوگیری می‌کند
Object.freeze(object)
// اگر اشیاء مسدود شده باشند، true برمی‌گرداند
Object.isFrozen(object)

تغییر مقدار ویژگی

منطق

Object.defineProperty(object, property, {value : value)

مثال

این مثال تغییر مقدار ویژگی را نشان می‌دهد:

const person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "EN"
};
// تغییر ویژگی
Object.defineProperty(person, "language", {value : "NO"});

خود کا تجربہ کریں

تغییر متادیتا

ES5 اجازه می‌دهد تا متادیتای زیرین را تغییر دهیم:

writable : true      // 属性值可更改
enumerable : true    // 属性可枚举
configurable : true  // 属性可重新配置
writable : false     // 属性值不可更改
enumerable : false   // 属性不可枚举
configurable : false // ویژگی قابل تغییر مجدد نیست

ES5 اجازه می‌دهد که getter و setter را تغییر دهیم:

// تعریف getter
get: function() { return language }
// تعریف setter
set: function(value) { language = value }

این مثال ویژگی language را فقط خواندنی تنظیم می‌کند:

Object.defineProperty(person, "language", {writable:false});

این مثال ویژگی language را غیرقابل شمارش می‌کند:

Object.defineProperty(person, "language", {enumerable:false});

لیست تمام ویژگی‌ها

این مثال تمام ویژگی‌های اشیاء را لیست می‌کند:

مثال

const person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "EN"
};
Object.defineProperty(person, "language", {enumerable:false});
Object.getOwnPropertyNames(person);  // آرایه‌ای از آرایه‌ها را برمی‌گرداند

خود کا تجربہ کریں

لیست ویژگی‌های قابل شمارش

این مثال تنها ویژگی‌های قابل شمارش اشیاء را لیست می‌کند:

مثال

const person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "EN"
};
Object.defineProperty(person, "language", {enumerable:false});
Object.keys(person);  // آرایه‌ای از ویژگی‌های قابل شمارش را برمی‌گرداند

خود کا تجربہ کریں

افزودن ویژگی

این مثال به اشیاء ویژگی جدید اضافه می‌کند:

مثال

// ایجاد اشیاء
const person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "EN"
};
// اضافه کردن ویژگی
Object.defineProperty(person, "year", {value:"2008"});

خود کا تجربہ کریں

افزودن Getter و Setter

Object.defineProperty() روش نیز می‌تواند برای اضافه کردن Getter و Setter استفاده شود:

مثال

// ایجاد اشیاء
const person = {firstName:"Bill", lastName:"Gates"};
// تعریف getter
Object.defineProperty(person, "fullName", {
  get: function () {return this.firstName + " " + this.lastName;}
});

خود کا تجربہ کریں

مثال یک نمونه شمارنده

// تعریف اشیاء
const obj = {counter:0};
// تعریف setter
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 (i) {this.counter -= i;}
});
// کانٹر کی آپریشن:
obj.reset;
obj.add = 5;
obj.subtract = 1;
obj.increment;
obj.decrement;

خود کا تجربہ کریں