CTN 06. Toán tử delete và __proto__ trong object
Hello! I'm Zu.Doan
Series này mình muốn rèn luyện khả năng suy nghĩ và giải bài tập, qua đó để hiểu rõ hơn các khái niệm của Javascript.
Bài 1
String.prototype.lengthy = () => {
console.log("hello");
};
let x = { name: "Vuong" };
delete x;
x.name.lengthy();
Lời giải:
String.prototype.lengthy = () => {
console.log("hello");
}; // đây là cách thêm prototype vào một đối tượng
let x = { name: "Vuong" };
delete x; // => return false
// delete operator là toán tử xóa phần tử của object, ko phải để xóa object
// 1 trường hợp ngoại lệ delete có thể xóa cả object đó là khi object đó:
// - nằm ở global scope
// - và KHÔNG được khai báo bằng từ khóa let, const hay var
x.name.lengthy(); // => return "hello"
Kiến thức liên quan:
- Toán tử
delete
Bài 2
let x = {};
x.__proto__.hi = 10;
Object.prototype.hi = ++x.hi;
console.log(x.hi + Object.keys(x).length);
Lời giải:
let x = {};
x.__proto__.hi = 10; // <=> Object.prototype.hi = 10
// bởi vì __proto__ sử dụng để objectA trỏ tới prototype của objectB (ở đây objectA là x và objectB là Object build-in trong JS)
Object.prototype.hi = ++x.hi; // Thiết lập prototype của Object = ++x.hi = 11
console.log(x.hi + Object.keys(x).length);
// x.hi = 11
// Object.keys(x) = ["hi"] => length = 1
// kết quả = 11 + 1 = 12
Kiến thức liên quan:
- proto (deprecated)
