Вопрос по ecmascript-5, javascript – Для чего определено внутреннее свойство в ECMAScript?

10

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

This specification uses various internal properties to define the semantics of object values.These internal properties are not part of the ECMAScript language. They are defined by this specification purely for expository purposes.

Означает ли это, чтоInternal properties defined by ECMAScript are not available for programming. They are used in the implementation of the javascript engine ?

Ваш Ответ

4   ответа
8

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

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

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

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

example о том, как реализовать движок JavaScript.

4

ailable for programming. They are used in the implementation of the javascript engine ?

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

1

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

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]], предназначенное только для использования во время выполнения, а не для программиста.

Похожие вопросы