روش‌های اشیاء JavaScript ES5

ECMAScript 5 (2009) بسیاری از روش‌های جدید به JavaScript اضافه کرد.

مدیریت شیء

// شیء جدیدی با استفاده از شیء موجود به عنوان prototype ایجاد می‌کند
Object.create()
// ویژگی‌های شیء را اضافه یا تغییر می‌دهد
Object.defineProperty(object, property, descriptor)
// ویژگی‌های شیء را اضافه یا تغییر می‌دهد
Object.defineProperties(object, descriptors)
// به ویژگی دسترسی دارد
Object.getOwnPropertyDescriptor(object, property)
// به صورت آرایه همه ویژگی‌ها را برمی‌گرداند
Object.getOwnPropertyNames(object)
// به prototype دسترسی دارد
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;

آزمایش کنید