Skip to main content

Command Palette

Search for a command to run...

CTN 06. Toán tử delete và __proto__ trong object

Published
2 min read

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 operatortoá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)

More from this blog

zujs

35 posts