オブジェクトの作成:
関数オブジェクトが作成されると、Functionコンストラクターによって生成された関数オブジェクトは次のようなコードを実行します:
this.prototype={constructor:this};
関数F
Fがnewを使用してオブジェクトを構築すると仮定します。メソッド オブジェクトのコンストラクターがこの F.prototype.constructor に設定されている場合
オブジェクトを作成する前に関数が関数のプロトタイプを変更すると、作成されたオブジェクトのコンストラクター属性に影響します
例:
function F(){ };
F.prototype={constructor:'1111'};
var o=new F();//o.constructor==='1111' true
継承の原則:
JavaScript の継承はプロトタイプ チェーンを使用します各関数のインスタンスは、コンストラクターのプロトタイプ属性で定義されたデータを共有します。あるクラスが別のクラスを継承するには、親関数のインスタンスを子関数のプロトタイプ属性に割り当てる必要があります。新しいインスタンス オブジェクトが作成されるたびに、オブジェクトのプライベート プロパティ __proto__ がコンストラクターのプロトタイプに自動的に接続されます。
instanceof は、インスタンス オブジェクトのプライベート プロトタイプ属性チェーンを検索して、それが指定されたオブジェクトのインスタンスであるかどうかを判断します
具体的な例:
//instanceof 実装
function Myinstanceof(obj,type)
{
var proto = obj .__ proto __; TreeView.prototype.constructor=TreeView;//修正コンストラクター
var view=new TreeView();// view.__proto__=TreeView.prototypeは自動的に完了します
alert(viewinstanceofView) //view.__proto__の場合はtrueが見つかります。 .__proto__ が見つかりました
alert(viewinstanceofTreeView); //view.__proto__ が見つかった場合に true が見つかりました
alert(Myinstanceof(view,View)); // true
上記のカスタマイズしたMyinstanceofは自分で実装したinstanceof関数の関数ですが、IEのカーネルインスタンスストレージのプロトタイプが__proto__ではないので、他のブラウザでは問題ありません
。