コンストラクタ
コンストラクタは、主オブジェクト、初期値が割り当てられているオブジェクトのメンバ変数を初期化するために使用される、特殊な関数であり、それは常にオブジェクトの一部が、関数にカプセル化された共通部分を抽出することができ、新しいと共に使用されます。
new
の実装観光
- メモリ内の新しい空のオブジェクトを作成します。
- この時点では空のオブジェクトにしてみましょう。
- コンストラクタ内のコードは、新しいオブジェクトは、プロパティとメソッドを追加するために実行されます。
- 戻り値新しいオブジェクト(あなたはコンストラクタ関数を返す必要はありません)
静的およびインスタンスメンバー
コンストラクタJavaScriptは、あなたが、その後も、コンストラクタ、追加するために、これらの方法の1つのメンバーは、静的およびインスタンスメンバーと呼ばれ、この内部に追加することができ、コンストラクタ関数自体を追加することができ、一部のメンバーに加えてもよいです
- 静的メンバー:それ自体が静的メンバは、コンストラクタ自体によってのみアクセスすることができると呼ばれるコンストラクタにメンバーを追加します。
- 例メンバーは:メンバーと呼ばれるインスタンスのメンバを作成するためにオブジェクトのコンストラクタの内部に、唯一のオブジェクトのインスタンスによってアクセスすることができます。
function Person(uname, age) {
// 实例成员定义
this.uname = uname;
this.age = age;
this.sing = function () {};
}
var zs = new Person('zs', 23);
console.log(zs.uname); // 实例成员访问
Person.sex = 'woman'; // 静态成员定义
console.log(Person.sex); // 静态成员访问
プロトタイプコンストラクタ prototype
コンストラクタ複合データ型(機能)は、実施例の増加に伴って、記憶のためのメモリ空間を再度開き、パフォーマンスの問題を作成します。
全てスルーコンストラクタプロトタイプ分布は、オブジェクトを共有すると、JavaScriptは、各コンストラクタは、プロトタイプ性を有し、所定の、点別のオブジェクトに注記:これはプロトタイプオブジェクトであり、すべてのオブジェクトのプロパティとメソッドは、設定されます機能は持っている。我々は、これらの方法を共有することができ、直接プロトタイプオブジェクトに定義されたのと同じものを、そのようなオブジェクトのすべてのインスタンスを置くことができます
function Person() {
this.sing = function () {}
}
Person.prototype.song = function () {console.log('增加共享方法')}
var zs = new Person();
var ls = new Person();
console.log(zs.sing === ls.sing); // false 因为每个实例的对象中的复杂数据类型,都会存放在不同的内存空间
zs.song(); // prototype 方法调用
console.log(zs.song === ls.song); // true 通过原型对象 prototype 共享了 song 方法
Objectプロトタイプ __proto__
オブジェクトプロパティがあります
__proto__
、オブジェクトが持っているため、オブジェクトのプロパティとメソッドは、コンストラクタのプロトタイププロトタイプオブジェクトを使用することができる理由点プロトタイププロトタイプオブジェクトのコンストラクタを__proto__
現在のプロトタイプを
__proto__
Objectプロトタイプとプロトタイププロトタイプオブジェクトは同等です
console.log(zs.__proto__ === Person.prototype); // true
__proto__
オブジェクトのオブジェクトのプロトタイプで意義の嘘は、方向、またはリンクを提供するためのメカニズムを見つけることが、それは実際の開発を使用することができない、非標準のプロパティで、それだけで内部のプロトタイプオブジェクトのプロトタイプを指します