11

ECMAScript 中的内部属性是为什么定义的?规范是什么意思

本规范使用各种内部属性来定义对象值的语义。这些内部属性不是 ECMAScript 语言的一部分。它们由本规范定义,纯粹是为了说明目的。

这是否意味着ECMAScript 定义的内部属性不可用于编程。它们用于 javascript 引擎的实现

4

4 回答 4

13

内部属性定义代码在执行时的行为,但不能通过代码访问。ECMAScript 为 JavaScript 中的对象定义了许多内部属性。内部属性由双方括号符号表示。

例如,JavaScript 函数是一个对象,它具有 [[call]] 属性。[[call]] 属性是函数独有的。

另一个内部属性示例是 [[prototype]] 属性。该属性是一个指针,指向实例正在使用的原型对象。由于无法通过代码访问内部属性,因此对象实例化无法访问原型,而其属性对对象都是可用的。您可以通过对对象使用 Object.getPrototypeOf() 方法来获取 [[prototype]] 属性的值。

var obj = new Object();
var prototype = Object.getPrototypeOf(obj);
console.log(prototype == Object.prototype);
于 2014-10-15T13:38:29.943 回答
5

这是否意味着 ECMAScript 定义的内部属性不可用于编程。它们用于 javascript 引擎的实现?

是的。它们仅用于实现目的,不需要“实名”。您可以在#8.6.2 对象内部属性和方法中阅读相关内容。

于 2012-06-12T19:01:05.023 回答
1

经常使用的例子是内部属性 [[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]] 属性访问,该属性仅供运行时使用,而不是程序员使用。

于 2012-06-12T19:08:25.740 回答
0

它们在如何实现 JavaScript 引擎的示例中使用。

于 2012-06-12T19:00:00.170 回答