内部属性

js/internal_property2026-10-29 11:03:47

JavaScript 中有许多内部属性和内部方法,这些属性和方法是 JavaScript 引擎用来实现语言特性的,但它们在标准 JavaScript 代码中是不可直接访问的。以下是一些常见的内部属性和方法:

常见的内部属性

  1. [[Prototype]]: 指向对象的原型。
  2. [[Class]]: 表示对象的类型(例如,Object、Array、Function等)。
  3. [[Extensible]]: 表示对象是否可以扩展(即是否可以添加新的属性)。
  4. [[Get]]: 用于获取对象属性的内部方法。
  5. [[Set]]: 用于设置对象属性的内部方法。
  6. [[Call]]: 用于调用函数对象的内部方法。
  7. [[Construct]]: 用于构造函数调用的内部方法。
  8. [[HasProperty]]: 用于检查对象是否具有某个属性的内部方法。
  9. [[Delete]]: 用于删除对象属性的内部方法。
  10. [[DefineOwnProperty]]: 用于定义或修改对象属性的内部方法。

示例解释

虽然这些内部属性和方法在标准JavaScript代码中是不可直接访问的,但它们可以通过一些公开的API间接地进行操作。例如:

  • [[Prototype]] 可以通过 Object.getPrototypeOf 和 Object.setPrototypeOf 进行访问和修改。
  • [[Class]] 可以通过 Object.prototype.toString.call 来查看对象的类型。
  • [[Extensible]] 可以通过 Object.isExtensible 和 Object.preventExtensions 进行检查和修改。

示例代码

// [[Prototype]]
const obj = {};
const proto = { greeting: "Hello" };
Object.setPrototypeOf(obj, proto);
console.log(Object.getPrototypeOf(obj)); // 输出: { greeting: "Hello" }

// [[Class]]
console.log(Object.prototype.toString.call([])); // 输出: [object Array]

// [[Extensible]]
const newObj = {};
console.log(Object.isExtensible(newObj)); // 输出: true
Object.preventExtensions(newObj);
console.log(Object.isExtensible(newObj)); // 输出: false

本页目录