Какая внутренняя собственность в ECMAScript определена?

Что такое Внутреннее свойство в ECMAScript? Что означает спецификация

В этой спецификации используются различные внутренние свойства для определения семантику значений объекта. Эти внутренние свойства не являются частью язык ECMAScript. Они определены в этой спецификации исключительно для демонстрационных целей.

Означает ли это, что Внутренние свойства, определенные ECMAScript, недоступны для программирования. Они используются при реализации javascript engine?

Ответ 1

Внутренние свойства определяют поведение кода по мере его выполнения, но не доступны через код. ECMAScript определяет множество внутренних свойств объектов в JavaScript. Внутренние свойства обозначаются символом с двойной квадратной скобкой.

Например, функция JavaScript является объектом и обладает свойством [[call]]. Свойство [[call]] уникально для работы.

Другим примером внутреннего свойства является свойство [[prototype]]. Это свойство является указателем, указывающим на объект прототипа, который использует экземпляр. Поскольку внутреннее свойство невозможно получить через код, экземпляр объекта не может получить доступ к прототипу, пока его свойства все доступны для объекта. Вы можете получить значение свойства [[prototype]], используя метод Object.getPrototypeOf() для объекта.

var obj = new Object();
var prototype = Object.getPrototypeOf(obj);
console.log(prototype == Object.prototype);

Ответ 2

Означает ли это, что внутренние свойства, определенные ECMAScript, недоступны для программирования. Они используются при реализации механизма javascript?

Да. Они предназначены только для целей реализации и не нуждаются в "настоящих именах". Вы можете прочитать об этом в # 8.6.2 Внутренние свойства и методы объекта.

Ответ 3

Часто используемым примером является внутреннее свойство [[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 internal property
//[[prototype]] which is pointing to the object foo.prototype

чтобы вы могли получить доступ к объектам, которые указывает внутреннее свойство [[прототип]], но не напрямую через внутреннее свойство [[prototype]], предназначенное только для среды выполнения, а не для программиста.

Ответ 4

Они используются в примере того, как реализовать механизм JavaScript.