1

ES5 より前にプロトタイプなしでオブジェクトを作成する方法はありましたか?

つまり、Object.create(null)(ES5)のようなもの

私はこのようなものがうまくいくかもしれないと思っていましたが、最後のステートメントは予期せず戻りますtrue:

function withPrototype(p) {
  function temp(){}
  temp.prototype = p;
  return new temp();
}

Object.getPrototypeOf(withPrototype(null)) === Object.prototype; // true

Object.getPrototypeOfES5です。ここで説明のために使用します。

4

2 に答える 2

2

いいえ。ES3 仕様[[Prototype]]で検索すると、[[Prototype]] を任意の値に変更する唯一の方法は [[Construct]] を使用することです。

ただし、その値がオブジェクトの場合にのみ機能します。そうでない場合 ( を含むnull)、[[Prototype]] は の初期値に設定されますObject.prototype

13.2.2 [[構築]]

Function オブジェクト F の [[Construct]] プロパティが呼び出されると、次の手順が実行されます。

  1. 新しいネイティブ ECMAScript オブジェクトを作成します。
  2. Result(1) の [[Class]] プロパティを に設定し"Object"ます。
  3. prototypeFのプロパティの値を取得します。
  4. Result(3) がオブジェクトの場合、Result(1) の [[Prototype]] プロパティを Result(3) に設定します。
  5. Result(3) がオブジェクトでない場合、15.2.3.1 で説明されているように、Result(1) の [[Prototype]] プロパティを元の Object プロトタイプ オブジェクトに設定します。
  6. F の [[Call]] プロパティを呼び出し、Result(1) をthis値として提供し、[[Construct]] に渡された引数リストを引数値として提供します。
  7. Type(Result(6)) が Object の場合、Result(6) を返します。
  8. 結果 (1) を返します。
于 2016-03-20T18:37:33.047 に答える