javascriptの中でconstructorが指している問題

2638 ワード

まず一つの例でconstructorの存在を指します.
function Fruit(){ }
var f=new Fruit();
console.log(f.constructor);//   Fruit()
上のコードから結論をまとめました.1:上のコードはコンソールで分かります.コンストラクタはコンストラクタへの参照です.
function Fruit(){ this.name="  "}
//var f=new Fruit();
function Apple(){this.name="  ";}
Apple.prototype=new Fruit();
var apple=new Apple();
console.log(apple.constructor);//     Fruit()
Apple.prototype={};//        Object()
apple=new Apple();
console.log(apple.constructor);//  Object()
ここはちょっとおかしいです.このコンストラクタは一体その実例のコンストラクタを指していますか?
上記のコードに基づいて結論をまとめました.2:constructorが指しているのは原型の対象のコンストラクタの引用です.
すなわち   apple.com nstructor==Apple.prototype.com nstructor
var apple2=new apple.constructor();
console.log(apple2.name);
または
var apple2=new Apple.prototype.constructor();
console.log(apple2.name);
プリントしたのは全部果物です.
私達が今彼に実行させたいのはアップルのプリントです.この時はコンストラクタの指差を再指定する必要があります.
上の2つの結論によると、例のconstructorを修正しても、コンストラクタのプロトタイプconstructorの属性を修正しても目的を達成することができます.
prototype属性のコードを書き換えて、このようなコードを書くことができます.
Apple.prototype.constructor=Apple;
あるいは実装後にインスタンスのconstructorを再作成します.
 apple.constructor=Apple;
 上の二つの方法は目的を達成することができますが、第一の方法を使うことを勧めます.
第二の方法は実用化の対象が必要であり、我々は継承の作成が完了した後にのみ実装されます.
などの具体的な対象があって、constructorを改正しに行きます.この時はもう遅くなりました.意味はもう大きくなくなりました.継承の関係はもう確定しました.