Phương thức đối tượng JavaScript ES5

ECMAScript 5 (2009) đã thêm nhiều phương pháp đối tượng mới cho JavaScript.

Quản lý đối tượng

// Tạo đối tượng từ đối tượng hiện có
Object.create()
// Thêm hoặc thay đổi thuộc tính đối tượng
Object.defineProperty(object, property, descriptor)
// Thêm hoặc thay đổi thuộc tính đối tượng
Object.defineProperties(object, descriptors)
// Truy cập thuộc tính
Object.getOwnPropertyDescriptor(object, property)
// Trả về một mảng tất cả các thuộc tính
Object.getOwnPropertyNames(object)
// Truy cập nguyên mẫu
Object.getPrototypeOf(object)
// Trả về một mảng các thuộc tính có thể liệt kê
Object.keys(object)

Bảo vệ đối tượng

// Ngăn cản thêm thuộc tính vào đối tượng
Object.preventExtensions(object)
// Nếu thuộc tính có thể thêm vào đối tượng, sẽ trả về true
Object.isExtensible(object)
// Ngăn cản thay đổi thuộc tính đối tượng (không phải giá trị)
Object.seal(object)
// Nếu đối tượng bị đóng kín, sẽ trả về true
Object.isSealed(object)
// Ngăn cản bất kỳ thay đổi nào đối với đối tượng
Object.freeze(object)
// Nếu đối tượng bị đóng băng, sẽ trả về true
Object.isFrozen(object)

thay đổi giá trị thuộc tính

cú pháp

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

thực thể

Ví dụ này thay đổi giá trị thuộc tính:

const person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "EN"
};
// Thay đổi thuộc tính
Object.defineProperty(person, "language", {value : "NO"});

Thử ngay

Thay đổi metadata

ES5 cho phép thay đổi các thuộc tính metadata sau:

writable : true      // 属性值可更改
enumerable : true    // 属性可枚举
configurable : true  // 属性可重新配置
writable : false     // 属性值不可更改
enumerable : false   // 属性不可枚举
configurable : false // thuộc tính không thể được cấu hình lại

ES5 cho phép thay đổi getter và setter:

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

ví dụ này thiết lập language thành chỉ đọc:

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

ví dụ này làm cho language không thể liệt kê:

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

liệt kê tất cả các thuộc tính

ví dụ này liệt kê tất cả các thuộc tính của đối tượng:

thực thể

const person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "EN"
};
Object.defineProperty(person, "language", {enumerable:false});
Object.getOwnPropertyNames(person);  // trả về mảng các mảng

Thử ngay

liệt kê các thuộc tính có thể liệt kê

ví dụ này chỉ liệt kê các thuộc tính có thể liệt kê của đối tượng:

thực thể

const person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "EN"
};
Object.defineProperty(person, "language", {enumerable:false});
Object.keys(person);  // trả về mảng các thuộc tính có thể liệt kê

Thử ngay

thêm thuộc tính

ví dụ này thêm thuộc tính mới vào đối tượng:

thực thể

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

Thử ngay

thêm Getter và Setter

Object.defineProperty() cách này cũng có thể được sử dụng để thêm Getter và Setter:

thực thể

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

Thử ngay

một ví dụ về đối tượng đếm

// 定义对象
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;}
});
// Thao tác bộ đếm:
obj.reset;
obj.add = 5;
obj.subtract = 1;
obj.increment;
obj.decrement;

Thử ngay