A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Function/prototype below:

Function: prototype - JavaScript | MDN

関数が new で呼び出されると、そのコンストラクターの prototype プロパティが、結果オブジェクトのプロトタイプになります。

function Ctor() {}
const inst = new Ctor();
console.log(Object.getPrototypeOf(inst) === Ctor.prototype); // true

「継承とプロトタイプチェーン」に、コンストラクター関数の prototype プロパティと、結果オブジェクトのプロトタイプ間の操作に関する詳しい情報があります。

ある関数に prototype プロパティがあるというだけでは、コンストラクターとして認められるには不十分です。ジェネレーター関数は prototype プロパティを持っていますがが、 new で呼び出すことはできません。

async function* asyncGeneratorFunction() {}
function* generatorFunction() {}

代わりに、ジェネレーター関数の prototype プロパティは、 new なしで呼び出されたときに使われます。prototypeプロパティは、返される Generator オブジェクトのプロトタイプとなります。

さらに、一部の関数は prototype を持っていても、 new で呼び出された場合は無条件に例外を送出します。例えば、 Symbol() 関数や BigInt() 関数は、 new で呼び出された場合には例外を発生させます。 Symbol.prototype と BigInt.prototype は、プリミティブ値のメソッドを提供するだけのためにあるので、ラッパーオブジェクトが直接構築されるべきではないからです。

次の関数には prototype がなく、たとえ後で prototype プロパティを手動で割り当てたとしても、コンストラクターとしては不適格です。

const method = { foo() {} }.foo;
const arrowFunction = () => {};
async function asyncFunction() {}

以下のものは有効なコンストラクターであり、 prototype があります。

class Class {}
function fn() {}

バインドされた関数は prototype プロパティを持っていませんが、構築することができる場合があります。 構築された場合、代わりにターゲット関数が構築され、ターゲット関数が構築可能であれば、通常のインスタンスを返します。

const boundFunction = function () {}.bind(null);

関数の prototype プロパティは、既定では、1つのプロパティ constructor を持つプレーンオブジェクトです。 constructor プロパティは書き込み可能で、列挙不可、構成可能なプロパティです。

関数の prototype が Object 以外の何かに再代入されている場合、関数が new で呼び出されると、返されるオブジェクトのプロトタイプは Object.prototype になります。(言い換えれば、new は prototype プロパティを無視し、プレーンなオブジェクトを構築します。)

function Ctor() {}
Ctor.prototype = 3;
console.log(Object.getPrototypeOf(new Ctor()) === Object.prototype); // true

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4