6
function catRecord(name, birthdate, mother) {
  return {name: name, birth: birthdate, mother: mother};
}

コンストラクターについての私の理解は、オブジェクトを構築するために使用される関数です。

この catRecord 関数はコンストラクターとしてカウントされますか?

4

4 に答える 4

1

この catRecord 関数はコンストラクターとしてカウントされますか?

いいえ。

はい、コンストラクターに非常に似ていますが、オブジェクトを返すすべての関数/メソッドを「コンストラクター」とは呼びません。継承が関係しない場合は、代わりにファクトリーという用語を使用します。

EcmaScript 仕様では、コンストラクターを単純に

オブジェクトを作成して初期化する関数オブジェクト。

ただし、そのすぐ下に、プロトタイプの継承に関するメモが既にあります。そして、言語の概要では、それは言います

コンストラクターは、プロトタイプベースの継承共有プロパティを実装するために使用される「<code>prototype」という名前のプロパティを持つ関数です。

したがって、技術的には実装する [[construct]]すべてのオブジェクトがコンストラクターですが、JavaScript では、「コンストラクター」という用語は、newキーワードと共に使用され、共通を共有するprototype(「クラス」を形成する) インスタンスを作成することを意図した関数にのみ使用されます。慣習的に、それらの名前は大文字になります。

于 2013-07-26T11:00:28.230 に答える
0

コンストラクターは、クラスのインスタンスを作成するたびに自動的に呼び出される関数です。

インスタンスのプロトタイプを作成した Object 関数への参照を返します。このプロパティの値は関数自体への参照であり、関数の名前を含む文字列ではありませんが、読み取り専用ではないことに注意してください (プリミティブなブール値、数値、または文字列値: 1、true、「読み取り専用」を除く)。 )。

Dateクラスのインスタンスを作成する場合:

var e = new Date();
alert(e.constructor); //return Date

次に、そのコンストラクターが返され、それがDateクラスDateのコンストラクターの名前になります。

同様に Number のインスタンスを作成するとvar n = new Number(5);、そのコンストラクタはコンストラクタの名前である Number を返します。

参照

例:

var Vehicle = function Vehicle() {
  // ...
}

var vehicle = new Vehicle();

コンストラクターが呼び出されるとどうなりますか?
new Vehicle()呼び出されると、JavaScript は次の 4 つのことを行います。

  1. 新しいオブジェクトを作成します。
  2. オブジェクトのコンストラクター プロパティを Vehicle に設定します。
  3. Vehicle.prototype に委譲するオブジェクトを設定します。
  4. 新しいオブジェクトのコンテキストで Vehicle() を呼び出します。
于 2013-07-26T10:52:55.560 に答える
-1
function Employee()  // Class and constructor
{ 
  this.name = "A";
  this.age = "23";
}

var a = new Employee(); // Creating instance

alert(a.name); // alerts A

function Employee(a,b)  // Class and constructor
{ 
  this.name = a;
  this.age = b;
}

var one = new Employee("A",23); // Creating instance
var two = new Employee("B",25); // Creating instance

alert(two.name); // alerts B

上記の例で必要なものがすべて説明されていることを願っています

追加 :

クラスにメソッドを追加したい場合はEmployee、次を使用して実行する必要がありますprototype

Employee.prototype.printName = function()
{
   document.write(this.name);
};

two.printName();  // Writes B
于 2013-07-26T10:59:33.400 に答える