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

ECMAScript 5 (2009) đã thêm rất nhiều phương thức đối tượng mới vào JavaScript.

Phương thức quản lý đối tượng


// Tạo đối tượng với một đối tượng hiện có làm nguyên mẫu
Object.create()

// Thêm hoặc thay đổi một 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ề tất cả các thuộc tính dưới dạng một mảng
Object.getOwnPropertyNames(object)

// Truy cập nguyên mẫu
Object.getPrototypeOf(object)

// Trả về các thuộc tính có thể liệt kê dưới dạng một mảng
Object.keys(object)

Phương thức bảo vệ các đối tượng


// Ngăn thêm thuộc tính vào một đối tượng
Object.preventExtensions(object)

// Trả về true nếu các thuộc tính có thể được thêm vào một đối tượng
Object.isExtensible(object)

// Ngăn các thay đổi của thuộc tính đối tượng (không phải giá trị)
Object.seal(object)

// Trả về true nếu đối tượng được bảo mật
Object.isSealed(object)

// Ngăn chặn bất kỳ thay đổi nào đối với một đối tượng
Object.freeze(object)

// Trả về true nếu đối tượng bị đóng băng
Object.isFrozen(object)

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


Cú pháp

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

Ví dụ bên dưới sẽ thực hiện thay đổi giá trị thuộc tính.

Ví dụ

// Tạo một đối tượng
const person = {
        firstName: "John",
        lastName: "Doe",
        language: "Việt Nam"
    };
// Thay đổi thuộc tính language
Object.defineProperty(person,"language",{value : "No"});

Xem kết quả

Thay đổi dữ liệu meta


ES5 cho phép thay đổi dữ liệu thuộc tính meta sau.

writable : true      // Giá trị thuộc tính có thể được thay đổi
enumerable : true    // Thuộc tính có thể được liệt kê
configurable : true  // Thuộc tính có thể được cấu hình lại
writable : false      // Giá trị thuộc tính không thể thay đổi
enumerable : false    // Thuộc tính không thể được liệt kê
configurable : false  // Thuộc tính không thể được cấu hình lại

ES5 cho phép thay đổi getters và setters.

// Định nghĩa getter
get: function() { return language }
// Định nghĩa setter
set: function(value) { language = value }

Ví dụ này làm cho thuộc tính language ở chế độ chỉ đọc.

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

Ví dụ này làm cho thuộc tính language không liệt kê được.

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 một đối tượng.

Ví dụ

// Tạo một đối tượng
const person = {
        firstName: "John",
        lastName: "Doe",
        language: "Việt Nam"
    };
Object.defineProperty(person,"language",{enumerable : false});
var x = Object.getOwnPropertyNames(person);

Xem kết quả

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 một đối tượng.

Ví dụ

// Tạo một đối tượng
const person = {
        firstName: "John",
        lastName: "Doe",
        language: "Việt Nam"
    };
Object.defineProperty(person,"language",{enumerable : false});
var x = Object.keys(person);

Xem kết quả

Thêm thuộc tính


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

Ví dụ

// Thêm thuộc tính
Object.defineProperty(person,"year",{value : "2018"});

Xem kết quả

Thêm getter và setter


Phương thức Object.defineProperty() cũng có thể được sử dụng để thêm Getters and Setters.

Ví dụ

// Thêm getter
Object.defineProperty(person,"fullName",{get : function(){
        return this.firstName + " " + this.lastName;
    }});

Xem kết quả

Ví dụ về bộ đếm


Ví dụ

// Tạo đối tượng
const count = {counter: 0};

// Thêm các thuộc tính
Object.defineProperty(count,"reset",{
        get : function(){
            this.counter = 0;    
        }
    });
Object.defineProperty(count,"increment",{
        get : function(){
            this.counter++;    
        }
    });
Object.defineProperty(count,"decrement",{
        get : function(){
            this.counter--;    
        }
    });
Object.defineProperty(count,"add",{
        set : function(value){
            this.counter += value;    
        }
    });
Object.defineProperty(count,"subtract",{
        set : function(value){
            this.counter -= value;    
        }
    });

count.reset;
count.increment;
count.increment;
count.increment;
count.decrement;
count.subtract = 2;
count.add = 10;
count.subtract = 4;
document.getElementById('demo').innerHTML = count.counter;

Xem kết quả