Metode Objek JavaScript ES5

ECMAScript 5 (2009) menambah banyak metode objek baru ke JavaScript.

Manajemen objek

// Membuat objek dengan prototipe objek yang ada
Object.create()
// Menambahkan atau mengubah atribut objek
Object.defineProperty(object, property, descriptor)
// Menambahkan atau mengubah atribut objek
Object.defineProperties(object, descriptors)
// Mengakses atribut
Object.getOwnPropertyDescriptor(object, property)
// Mengembalikan semua atribut dalam bentuk array
Object.getOwnPropertyNames(object)
// Mengakses prototipe
Object.getPrototypeOf(object)
// Mengembalikan properti yang dapat dihitung dalam bentuk array
Object.keys(object)

Proteksi objek

// Menghalangi penambahan atribut ke objek
Object.preventExtensions(object)
// Jika atribut dapat ditambahkan ke objek, kembalikan true
Object.isExtensible(object)
// Menghalangi perubahan atribut objek (tidak nilai)
Object.seal(object)
// Jika objek dihalangi, kembalikan true
Object.isSealed(object)
// Menghalangi perubahan apapun terhadap objek
Object.freeze(object)
// Jika objek dijalankan, kembalikan true
Object.isFrozen(object)

Ubah nilai atribut

语法

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

instans

Contoh ini mengubah nilai atribut:

const person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "EN"
};
// Modifikasi atribut
Object.defineProperty(person, "language", {value : "NO"});

Coba Sendiri

Ubah meta data

ES5 mengijinkan perubahan meta data berikut:

writable : true      // 属性值可更改
enumerable : true    // 属性可枚举
configurable : true  // 属性可重新配置
writable : false     // 属性值不可更改
enumerable : false   // 属性不可枚举
configurable : false // properti tidak dapat diatur ulang

ES5 mengijinkan perubahan getter dan setter:

// 定义 getter
get: function() { return language }
// 定义 setter
set: function(value) { language = value }

misalnya ini mengatur language menjadi hanya-baca:

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

misalnya ini menjadikan language tidak dapat dihitung:

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

Menampilkan semua properti

misalnya ini menampilkan semua properti dari objek:

instans

const person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "EN"
};
Object.defineProperty(person, "language", {enumerable:false});
Object.getOwnPropertyNames(person);  // 返回数组的数组

Coba Sendiri

Menampilkan properti yang dapat dihitung

misalnya ini hanya menampilkan properti yang dapat dihitung dari objek:

instans

const person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "EN"
};
Object.defineProperty(person, "language", {enumerable:false});
Object.keys(person);  // 返回可枚举属性的数组

Coba Sendiri

Menambah properti

misalnya ini menambahkan properti baru ke objek:

instans

// 创建对象
const person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "EN"
};
// 添加属性
Object.defineProperty(person, "year", {value:"2008"});

Coba Sendiri

Menambah Getter dan Setter

Object.defineProperty() metode ini juga dapat digunakan untuk menambah Getter dan Setter:

instans

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

Coba Sendiri

sebuah instansis penhitung

// 定义对象
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;}
});
// Operasi penghitung:
obj.reset;
obj.add = 5;
obj.subtract = 1;
obj.increment;
obj.decrement;

Coba Sendiri