18920


**Internal Slot とは何でしょうか？**  
・プロパティとは異なる？  
・内部的な場所なので、意図的にアクセスすることはできない？  
・決められたルールに従って処理されるので利用者は気にする必要がない、ということでしょうか？  
・それとも__proto__みたいに、非推奨だけれどもアクセスする方法はあるのでしょうか？

<http://www.ecma-international.org/ecma-262/6.0/index.html#sec-properties-of-
promise-instances>


CC BY-SA 3.0
2015-11-16T23:27:31.273
18916
2019-07-28T02:01:36.217
2019-07-28T02:01:36.217
9008
7886
question
javascript ecmascript-6 promise
Promiseが状態を保持するInternal Slot [[PromiseState]]について


[6.1.7.2 Object Internal Methods and Internal Slots](http://www.ecma-
international.org/ecma-262/6.0/index.html#sec-object-internal-methods-and-
internal-slots) に説明があります。それに基づくと回答は以下になります。

> プロパティとは異なる？

異なります。

> 内部的な場所なので、意図的にアクセスすることはできない？

できません。正確には、アクセスする方法は規定されていません。  
ただし slot によってはアクセスする方法が規定されている場合もあります。

> 決められたルールに従って処理されるので利用者は気にする必要がない、ということでしょうか？

基本的にはその通り、気にする必要はありません。

> それとも__proto__みたいに、非推奨だけれどもアクセスする方法はあるのでしょうか？

実装やslotの内容によってはある可能性があります。

* * *

`Internal method` と `Internal slot`
は、主にECMAScriptの処理系の実装者に向けて、詳細な動作を説明・規定するために設けられた概念とのことです。そのため普遍的にアクセスする方法は存在しないようです。

ただし個別に実際のメソッドやプロパティとしてアクセスできるものもあり、それらは個別に仕様書内に、追うのは大変そうですが、書かれています。

* * *

また、過去の質問と考え合わせると、Promiseがどのように実装されているかに興味がおありのように見受けられます。もしそうならば、Promiseが実装されていない
JavaScript 処理系に向けて、JavaScriptで実装された
[es6-promise](https://github.com/jakearchibald/es6-promise)
などが存在しますので、[ソースコード(es6-promise)](https://raw.githubusercontent.com/jakearchibald/es6-promise/master/dist/es6-promise.js)
を参考にされると良いかもしれません。

ただ、これらのJSによる実装は、internal
methodやslotをただのオブジェクトを用いて実装していますので、それらに無理矢理アクセスすることは可能になっており、その点はECMAScriptの仕様書の定義外であることに、ご留意ください。


CC BY-SA 3.0
2015-11-17T01:36:28.810
18920
2015-11-17T01:43:18.973
2015-11-17T01:43:18.973
208
208
18916
answer