1

JavaScript の関数は、新しいオブジェクトをインスタンス化するために使用できるコンストラクターを持つプロトタイプ プロパティを持つオブジェクトに他ならないことを私は知っています。

ただし、次のことはできません。

 let Pear = {
    prototype : Object.prototype
 };
 let p = new Pear();  //Throws "caught TypeError: Pear is not a constructor"

私の意見では、これは次のようにまったく同じである必要があります。

 function Pear() {

 }
 let p = new Pear();

何が機能します。どこが違うのかちょっと気になります。私の最初の方法の修正はありますか?または、「関数」は「実際の」オブジェクトではなく、別の方法で扱われますか? 本当にただの好奇心です。実際には重要なことは何もありません...

4

1 に答える 1

2

操作するオブジェクトは内部メソッドをnew実装する必要があります[[Construct]]。そうしないと、TypeError 例外がスローされます (観察したこと)。

newそれを知っていると、オブジェクト リテラル構文で生成​​されたオブジェクトと組み合わせて使用​​できるとは思えません。

ただし、そのようなものを定義している場合は、おそらくそうしたくないでしょう。を使用して、前者のプロパティを含む新しいオブジェクトを作成できますObject.assign()

let p = Object.assign({}, Pear);

または、別の方法を使用して、オブジェクトのプロトタイプを別のものに変更することもできます。

于 2016-09-20T15:55:19.643 に答える