Javascript原型(二)
2466 ワード
図解の原型メモリ状況 したがって、コードの開始時に、構造関数は、new作成オブジェクト を実行する.は、構造関数 .メモリ状況 変数p に値を与えます.は、コンストラクタに対して、Personタイプのオブジェクトはコンストラクタの実例となるオブジェクト である.構造関数に対して、神秘的なオブジェクトは構造関数のプロトタイプ である. Personタイプのオブジェクトに対して、神秘的なオブジェクトはPersonタイプのオブジェクトの原型オブジェクト である.原型継承 なぜ原型を使うのですか?どうして属性は普通原型に置かないですか? 属性はオブジェクトの特徴を表しています.オブジェクト特有のものです.オブジェクトが異なり、属性も異なるはずです.しかし、原型に置くと、すべてのオブジェクトに共有されます.
どうして方法は原型に置くことができますか? 属性は対象特有ですが、この対象の行為は同じであるべきです.例えば、人と人は違いますが、人は歩いたり食事をしたりします.これは行為です.すべての人は同じです.だから、原型に置いて多重化することができます.
プロトタイプ1、利用対象の動特性 をどのように修正しますか?第一の方式は第二の方式と最大の違いは、第二の方式はまた一つのオブジェクトを作成し、元の原型オブジェクトを置換したので、今はもう二つのオブジェクトがメモリにあります.第一の方法は直接元のオブジェクトに属性 を追加することです.
以下のテーマを分析します事前解析コンストラクタ 構築関数のプロトタイプ属性付与値 var p 1=new Person(); プロトタイプの属性は、まず等号の右側のステートメントを実行します.つまり、メモリにオブジェクト を作成しました. var p 2=new Person(); このとき、構造関数のプロトタイプ属性は匿名のオブジェクトに向けられているので、新たに作成された に向けられている.は、図から であることを知ることができる.
function Person() {//TODO}
var p = new Person();
コードを実行する前に事前解析のプロセスが必要です.function Person(){}
は関数宣言であり、p
も声明であり(pは描かれていない)、前解析の時に声明が完成した.Person
はメモリに既に存在していますので、コード実行の最初の文はvar p = new Person();
プログラムの実行を開始します.Person
を実行し、オブジェクトの初期化(属性の追加)を実行する/* */
Person.prototype.good = function() {console.log(" ");}
p.good(); //
p
が示すオブジェクトは、デフォルトでPerson.prototype
に接続され、Person
のタイプのオブジェクトにはgood
の方法が存在しないが、p
はgood
の方法にもアクセスすることができ、これにより、現在のオブジェクトにある属性や方法が存在しない場合は、神秘的なオブジェクトを検索することができる.神秘的なオブジェクトから継承され、現在のオブジェクトの例は、元のオブジェクトから継承され、Person
です.Student.prototype.sleep = function(){}
、直接置換/* .prototype.xxxx = vvvv */
/* */
Student.prototype = {
sleep: function(){}
study: function(){}
}
以下のテーマを分析します
function Person() {}
Person.prototype.func = function () {
console.log("11111");
};
var p1 = new Person();
Person.prototype = {
func: function () {
console.log("2222");
}
};
var p2 = new Person();
p1.func();
p2.func();
タイプのオブジェクトのプロトタイプオブジェクトも匿名のオブジェクトPerson
の実行結果がp1.func()
であり、1111
の実行結果がp2.func()
2222