JavaScript Object.defineProperty()

Definisi dan penggunaan

Object.defineProperty() Metode digunakan untuk menambahkan atau mengubah attribute objek.

Object.defineProperty() Metode memungkinkan Anda mengubah metadata attribute.

Object.defineProperty() Metode memungkinkan Anda menambahkan getter dan setter.

Metode terkait:

Object.defineProperty() Menambahkan atau mengubah attribute.

Object.defineProperties() Menambahkan atau mengubah beberapa attribute.

Object.getOwnPropertyNames() Mengembalikan semua nama attribute objek.

Object.getOwnPropertyDescriptor() Mengembalikan deskripsi attribute.

Object.getOwnPropertyDescriptors() Mengembalikan deskripsi dari semua attribute objek.

Instance

Contoh 1

Menambahkan attribute:

// 创建一个对象
const person = {
  firstName: "Bill",
  lastName: "Gates"
  language: "EN"
};
// Menambahkan attribute baru
Object.defineProperty(person, "year", {value:"2008"});

Coba Sendiri

Contoh 2

Ubah attribute:

// 创建一个对象
const person = {
  firstName: "Bill",
  lastName: "Gates"
  language: "EN"
};
// 修改一个属性
Object.defineProperty(person, "language", {value:"NO"});

Coba Sendiri

Contoh 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>";
}
// Menampilkan attribute
document.getElementById("demo").innerHTML = txt;

Coba Sendiri

Contoh 4

Contoh berikutnya sama seperti contoh sebelumnya, tetapi attribute language tersembunyi, sehingga tidak dapat diekspor:

// 创建一个对象
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;

Coba Sendiri

例子 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;

Coba Sendiri

例子 6

此例使用 getter 将 firstName 和 lastName 连接起来:

// 创建一个对象
const person = {
  firstName: "Bill",
  lastName: "Gates"
};
// 定义一个 Getter
Object.defineProperty(person, "fullName", {
  get: function () { return this.firstName + " " + this.lastName; }
});

Coba Sendiri

例子 7

JavaScript 的 Getter 和 Setter 非常适合创建计数器:

// 定义 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; }
});

Coba Sendiri

Sintaks

Object.defineProperty(object, property, descriptor)

parameter

parameter Deskripsi
object Diperlukan. Objek target.
property Diperlukan. Nama properti.
descriptor

Diperlukan. Untuk menambahkan atau mengubah deskripsi properti:

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

Nilai Kembalian

Tipe Deskripsi
Object Objek yang diubah.

Dukungan Peramban

Object.defineProperty() Adalah fitur ECMAScript5 (ES5).

Dari Juli 2013, semua peramban modern sepenuhnya mendukung ES5 (JavaScript 2009):

Chrome Edge Firefox Safari Opera
Chrome 23 IE/Edge 11 Firefox 21 Safari 6 Opera 15
September 2012 September 2012 April 2013 Juli 2012 Juli 2013