JavaScript 中有许多内部属性和内部方法,这些属性和方法是 JavaScript 引擎用来实现语言特性的,但它们在标准 JavaScript 代码中是不可直接访问的。以下是一些常见的内部属性和方法:
常见的内部属性
- [[Prototype]]: 指向对象的原型。
- [[Class]]: 表示对象的类型(例如,
Object、Array、Function等)。 - [[Extensible]]: 表示对象是否可以扩展(即是否可以添加新的属性)。
- [[Get]]: 用于获取对象属性的内部方法。
- [[Set]]: 用于设置对象属性的内部方法。
- [[Call]]: 用于调用函数对象的内部方法。
- [[Construct]]: 用于构造函数调用的内部方法。
- [[HasProperty]]: 用于检查对象是否具有某个属性的内部方法。
- [[Delete]]: 用于删除对象属性的内部方法。
- [[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