ECMAScript 中的内部属性是为什么定义的?规范是什么意思
本规范使用各种内部属性来定义对象值的语义。这些内部属性不是 ECMAScript 语言的一部分。它们由本规范定义,纯粹是为了说明目的。
这是否意味着ECMAScript 定义的内部属性不可用于编程。它们用于 javascript 引擎的实现?
ECMAScript 中的内部属性是为什么定义的?规范是什么意思
本规范使用各种内部属性来定义对象值的语义。这些内部属性不是 ECMAScript 语言的一部分。它们由本规范定义,纯粹是为了说明目的。
这是否意味着ECMAScript 定义的内部属性不可用于编程。它们用于 javascript 引擎的实现?
内部属性定义代码在执行时的行为,但不能通过代码访问。ECMAScript 为 JavaScript 中的对象定义了许多内部属性。内部属性由双方括号符号表示。
例如,JavaScript 函数是一个对象,它具有 [[call]] 属性。[[call]] 属性是函数独有的。
另一个内部属性示例是 [[prototype]] 属性。该属性是一个指针,指向实例正在使用的原型对象。由于无法通过代码访问内部属性,因此对象实例化无法访问原型,而其属性对对象都是可用的。您可以通过对对象使用 Object.getPrototypeOf() 方法来获取 [[prototype]] 属性的值。
var obj = new Object();
var prototype = Object.getPrototypeOf(obj);
console.log(prototype == Object.prototype);
这是否意味着 ECMAScript 定义的内部属性不可用于编程。它们用于 javascript 引擎的实现?
是的。它们仅用于实现目的,不需要“实名”。您可以在#8.6.2 对象内部属性和方法中阅读相关内容。
经常使用的例子是内部属性 [[prototype]],所有对象都有一个,但你不能直接访问它,例如。
function foo(){
this.first = "hi"
this.second = something
}
foo.prototype = {
constructor : foo,
anotherProp : "hello"
}
var obj = new foo();
console.log(obj.anotherProp); //hello
//here the runtime will look in obj for anotherProp and
//fail to find it so it will look in obj's internal property
//[[prototype]] which is pointing to the object foo.prototype
因此您可以访问内部属性 [[prototype]] 指向的对象,但不能直接通过内部 [[prototype]] 属性访问,该属性仅供运行时使用,而不是程序员使用。
它们在如何实现 JavaScript 引擎的示例中使用。