オブジェクトの作成:
関数オブジェクトが作成されると、関数コンストラクターによって生成された関数オブジェクトは次のようなコードを実行します:
this.prototype={constructor:this};
関数 F を仮定します
F は、新しいメソッドを使用するオブジェクト オブジェクトのコンストラクターがこの F.prototype.constructor に設定されている場合
オブジェクトを作成する前に関数が関数のプロトタイプを変更すると、作成されたオブジェクトのコンストラクター属性に影響します
例:
function F(){} ;
F.prototype={constructor: '1111'};
var o=new F();//o.constructor==='1111' true
の原理継承:
JavaScript の継承 プロトタイプチェーンを使用する仕組みで、各関数インスタンスはコンストラクターのプロトタイプ属性で定義されたデータを共有します。あるクラスが別のクラスを継承するには、親関数インスタンスが次のようになっている必要があります。子関数のプロトタイプ属性に割り当てられます。新しいインスタンス オブジェクトが作成されるたびに、オブジェクトのプライベート プロパティ __proto__ がコンストラクターのプロトタイプに自動的に接続されます。
instanceof は、インスタンス オブジェクトのプライベート プロトタイプ属性チェーンを検索して、それが指定されたオブジェクトのインスタンスであるかどうかを判断します
具体的な例:
//instanceof は
関数 Myinstanceof(obj,type)
{ var proto=obj.__proto__;
while(proto)
{
if(proto ===type.prototype)break;
proto=proto.__proto__; >return proto!=null;
}
function View(){}
function TreeView(){}
TreeView.prototype=new View();//TreeView .prototype.__proto__=TreeView.prototype 自動補完
TreeView.prototype.constructor=TreeView;//修正コンストラクター
var view=new TreeView();//view.__proto__=TreeView.prototype 自動補完
alert(viewinstanceofView); //true view.__proto__.__proto__ が見つかると、
alert(viewinstanceofTreeView) //true が見つかります。 view.__proto__ が見つかると、
alert(Myinstanceof(view) ,View)); //true
アラート(Myinstanceof(view,TreeView)) //true