JavaScript Object.defineProperty()

تعریف و استفاده

Object.defineProperty() این روش برای افزودن یا تغییر ویژگی‌های یک شیء استفاده می‌شود.

Object.defineProperty() این روش به شما اجازه می‌دهد که داده‌های متای ویژگی‌ها را تغییر دهید.

Object.defineProperty() این روش به شما اجازه می‌دهد که getter و setter اضافه کنید.

روش‌های مرتبط:

Object.defineProperty() افزودن یا تغییر ویژگی.

Object.defineProperties() افزودن یا تغییر چندین ویژگی.

Object.getOwnPropertyNames() تمام نام‌های ویژگی‌های یک شیء را برمی‌گرداند.

Object.getOwnPropertyDescriptor() توصیف ویژگی را برمی‌گرداند.

Object.getOwnPropertyDescriptors() تمام توصیفات ویژگی‌های یک شیء را برمی‌گرداند.

مثال

مثال 1

افزودن ویژگی:

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

آزمایش کنید

مثال 2

تغییر ویژگی:

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

آزمایش کنید

مثال 3

// ایجاد یک شیء
const person = {
  firstName: "Bill",
  lastName: "Gates"
  language: "NO"
};
// تغییر یک ویژگی
Object.defineProperty(person, "language", {
  value: "EN"
  writable: true,
  enumerable: true,
  configurable: true
});
// جستجوی ویژگی‌ها
let txt = "";
for (let x in person) {
  txt += person[x] + "<br>";
}
// نمایش ویژگی
document.getElementById("demo").innerHTML = txt;

آزمایش کنید

مثال 4

مثال بعدی با مثال قبلی کد مشابه است، اما ویژگی language را پنهان کرده است تا قابل شمارش نباشد:

// ایجاد یک شیء
const person = {
  firstName: "Bill",
  lastName: "Gates"
  language: "NO"
};
// تغییر یک ویژگی
Object.defineProperty(person, "language", {
  value: "EN"
  writable: true,
  enumerable: false,
  configurable: true
});
// جستجوی ویژگی‌ها
let txt = "";
for (let x in person) {
  txt += person[x] + "<br>";
}
document.getElementById("demo").innerHTML = txt;

آزمایش کنید

مثال 5

در این مثال یک setter و getter ایجاد شده است تا اطمینان حاصل شود که ویژگی language به صورت بزرگ‌تر به‌روزرسانی می‌شود:

// ایجاد یک شیء
const person = {
  firstName: "Bill",
  lastName: "Gates"
  language: "NO"
};
// تغییر یک ویژگی
Object.defineProperty(person, "language", {
  get: function() { return language },
  set: function(value) { language = value.toUpperCase() }
});
// تغییر language
person.language = "en";
// نمایش language
document.getElementById("demo").innerHTML = person.language;

آزمایش کنید

مثال 6

در این مثال از getter برای اتصال firstName و lastName استفاده شده است:

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

آزمایش کنید

مثال 7

Getter و Setter در JavaScript برای ایجاد شمارنده بسیار مناسب هستند:

// تعریف Setter و Getter
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; }
});

آزمایش کنید

نحوه استفاده

Object.defineProperty(object, property, descriptor)

پارامترها

پارامترها توضیح
object لازم است. هدف.
property لازم است. نام ویژگی.
descriptor

لازم است. برای اضافه کردن یا تغییر توصیفات ویژگی‌ها لازم است:

  • value: value
  • writable : true|false
  • enumerable : true|false
  • configurable : true|false
  • get : function
  • set : function

مقدار بازگشتی

نوع توضیح
Object مجموعه‌ای از تغییرات در اینجا آورده شده است.

پشتیبانی مرورگر

Object.defineProperty() این ویژگی‌ها از ECMAScript5 (ES5) است.

از ژوئیه 2013، تمام مرورگرهای مدرن به طور کامل از ES5 (JavaScript 2009) پشتیبانی می‌کنند:

Chrome Edge Firefox Safari Opera
Chrome 23 IE/Edge 11 Firefox 21 Safari 6 Opera 15
سپتامبر 2012 سپتامبر 2012 آوریل 2013 ژوئیه 2012 ژوئیه 2013