Các Phương Thức Đối Tượng JavaScript: Hướng Dẫn Từ Cơ Bản Đến Nâng Cao
JavaScript mang đến nhiều phương thức đối tượng mạnh mẽ, cho phép lập trình viên thao tác và quản lý dữ liệu một cách hiệu quả. Trong bài viết này, chúng tôi sẽ khám phá chi tiết từng phương thức, từ những thao tác cơ bản như lấy key, value, đến các kỹ thuật nâng cao như định nghĩa và kiểm soát thuộc tính. Dưới đây là danh sách 23 phương thức chính của đối tượng JavaScript mà bạn nên biết:
1. Object.keys(obj)
Phương thức này trả về một mảng chứa tên các thuộc tính có thể liệt kê được của đối tượng (khóa).
javascript
const obj = { a: 1, b: 2, c: 3 };
console.log(Object.keys(obj));
// Output: ['a', 'b', 'c']
2. Object.values(obj)
Trả về một mảng chứa các giá trị thuộc tính có thể liệt kê của đối tượng.
javascript
const obj = { a: 1, b: 2, c: 3 };
console.log(Object.values(obj));
// Output: [1, 2, 3]
3. Object.entries(obj)
Phương thức này trả về một mảng chứa các cặp thuộc tính [key, value] có thể liệt kê được theo thứ tự của đối tượng.
javascript
const obj = { a: 1, b: 2, c: 3 };
console.log(Object.entries(obj));
// Output: [['a', 1], ['b', 2], ['c', 3]]
4. Object.isSealed(obj)
Trả về true nếu đối tượng đã bị niêm phong, ngược lại trả về false.
javascript
const obj = Object.seal({ a: 1 });
console.log(Object.isSealed(obj));
// Output: true
5. Object.assign(target, source)
Phương thức này sao chép tất cả các giá trị của các thuộc tính từ một hoặc nhiều đối tượng nguồn sang một đối tượng đích và trả về đối tượng đích.
javascript
const target = { a: 1 };
const source = { b: 2, c: 3 };
const result = Object.assign(target, source);
console.log(result);
// Output: { a: 1, b: 2, c: 3 }
6. Object.freeze(obj)
Đóng băng một đối tượng, ngăn cản việc thêm thuộc tính mới hoặc xóa và cấu hình lại các thuộc tính đã tồn tại.
javascript
const obj = { name: 'Khabib' };
Object.freeze(obj);
obj.name = 'Bob'; // Điều này sẽ không thay đổi giá trị
console.log(obj.name); // Output: 'Khabib'
7. Object.seal(obj)
Niêm phong một đối tượng, cho phép sửa đổi các thuộc tính hiện có nhưng ngăn cản việc thêm mới.
javascript
const obj = { name: 'Alice' };
Object.seal(obj);
obj.name = 'Bob'; // Giá trị sẽ được cập nhật
obj.age = 25; // Điều này sẽ không thêm thuộc tính mới
console.log(obj); // Output: { name: 'Bob' }
8. Object.create(proto)
Tạo một đối tượng mới với đối tượng nguyên mẫu và các thuộc tính được chỉ định.
javascript
const person = { greet() {console.log('Hello!');}};
const student = Object.create(person);
student.greet();
// Output: 'Hello!'
9. Object.defineProperty(obj, prop, descriptor)
Xác định thuộc tính mới trên đối tượng hoặc sửa đổi thuộc tính hiện có.
javascript
const obj = {};
Object.defineProperty(obj, 'name', { value: 'Alice', writable: false });
console.log(obj.name); // 'Alice'
10. Object.defineProperties(obj, props)
Xác định nhiều thuộc tính mới hoặc sửa đổi các thuộc tính hiện có trên đối tượng.
javascript
const obj = {};
Object.defineProperties(obj, {
name: { value: 'Cormier', writable: false },
age: { value: 30, writable: true }
});
console.log(obj.name); // 'Cormier'
11. Object.isExtensible(obj)
Xác định xem một đối tượng có thể mở rộng để thêm thuộc tính mới hay không.
javascript
const obj = {};
console.log(Object.isExtensible(obj)); // true
Object.preventExtensions(obj);
console.log(Object.isExtensible(obj)); // false
12. Object.isFrozen(obj)
Xác định xem một đối tượng có bị đóng băng hay không (không thể mở rộng và tất cả các thuộc tính đều không thể ghi).
javascript
const obj = Object.freeze({ name: 'Gregor' });
console.log(Object.isFrozen(obj));
// Output: true
13. Object.hasOwn(obj, prop)
Trả về true nếu đối tượng có thuộc tính chỉ định làm thuộc tính riêng của nó.
javascript
const obj = { name: 'Alice' };
console.log(Object.hasOwn(obj, 'name')); // true
console.log(Object.hasOwn(obj, 'age')); // false
14. Object.hasOwnProperty(prop)
Xác định xem một đối tượng có chứa thuộc tính được chỉ định dưới dạng thuộc tính trực tiếp hay không.
javascript
const obj = { name: 'Alice' };
console.log(obj.hasOwnProperty('name')); // true
console.log(obj.hasOwnProperty('age')); // false
15. Object.preventExtensions(obj)
Ngăn không cho thêm các thuộc tính mới vào đối tượng.
javascript
const obj = {};
Object.preventExtensions(obj);
obj.name = 'Khabib'; // Không thể thêm
console.log(obj); // {}
16. Object.setPrototypeOf(obj, proto)
Đặt nguyên mẫu của một đối tượng được chỉ định.
javascript
const proto = { greet() {console.log('Hello!');}};
const obj = {};
Object.setPrototypeOf(obj, proto);
obj.greet(); // 'Hello!'
17. Object.fromEntries(iterable)
Chuyển đổi danh sách các cặp khóa-giá trị thành một đối tượng.
javascript
const entries = [['name', 'Rock'], ['age', 35]];
const obj = Object.fromEntries(entries);
console.log(obj); // { name: 'Rock', age: 35 }
18. Object.getPrototypeOf(obj)
Trả về nguyên mẫu của đối tượng được chỉ định.
javascript
const obj = {};
const proto = Object.getPrototypeOf(obj);
console.log(proto === Object.prototype); // true
19. Object.getOwnPropertySymbols(obj)
Trả về một mảng chứa tất cả các thuộc tính ký hiệu được tìm thấy trên đối tượng.
javascript
const symbol = Symbol('id');
const obj = { [symbol]: 123 };
const symbols = Object.getOwnPropertySymbols(obj);
console.log(symbols); // [Symbol(id)]
console.log(obj[symbols[0]]); // 123
20. Object.getOwnPropertyDescriptor(obj, prop)
Trả về mô tả thuộc tính cho một thuộc tính cụ thể của đối tượng.
javascript
const obj = { name: 'Alice', age: 26 };
const descriptor = Object.getOwnPropertyDescriptor(obj, 'name');
console.log(descriptor);
// Output: { configurable: true, enumerable: true, value: "Alice", writable: true }
21. Object.getOwnPropertyNames(obj)
Trả về một mảng chứa tất cả các thuộc tính trên đối tượng, bao gồm cả những thuộc tính không thể liệt kê.
javascript
const obj = { name: 'Ferguson', age: 30 };
const propertyNames = Object.getOwnPropertyNames(obj);
console.log(propertyNames); // ['name', 'age']
22. Object.is(value1, value2)
So sánh hai giá trị để xem chúng có giống nhau hay không.
javascript
console.log(Object.is('foo', 'foo')); // true
console.log(Object.is({}, {})); // false
23. Object.getOwnPropertyDescriptors(obj)
Trả về tất cả các mô tả thuộc tính riêng của một đối tượng.
javascript
const obj = { name: 'Khabib', age: 28 };
const descriptors = Object.getOwnPropertyDescriptors(obj);
console.log(descriptors);
// Output: {
// age: {
// configurable: true,
// enumerable: true,
// value: 28,
// writable: true
// },
// name: {
// configurable: true,
// enumerable: true,
// value: "Khabib",
// writable: true
// }
// }
Hy vọng những thông tin trong bài viết này sẽ giúp bạn hiểu rõ hơn về các phương thức đối tượng trong JavaScript và ứng dụng của chúng trong lập trình.
source: viblo