Jsのプロトタイプ
2951 ワード
1.prototype(原型)
JavaScriptでは、私たちが作成した関数ごとにプロトタイプの属性があります.この属性はオブジェクトで、特定のタイプのすべてのインスタンスで共有できる属性または方法を保存する用途があります.すなわち、ある関数Personのプロトタイプに属性または方法を追加すると、Personを構成関数として生成したすべての例が属性または方法にアクセスできる.
2.原型、構造関数と実例の関係
関数を定義すると、そのデフォルトのプロトタイプオブジェクトが発生します.このプロトタイプオブジェクトは、この関数を指すconstrutor属性を持っています.この関数を使って作成されたすべてのインスタンスの中には、一つのポインターが含まれています.プロト.prototypeオブジェクトを指します(IE 8ではこのポインタにアクセスできません):
3.プロトタイプチェーンと継承
プロトタイプは対象ですので、必ず一つのタイプがあります.プロト.コンパスは構造関数のプロトタイプのオブジェクトを指しています.同じように、このプロトタイプのオブジェクトはもう一つあります.プロト.コンパスは構造関数のプロトタイプオブジェクトを指しています.このようにして、Object.prototypeまで環をします.これはプロトタイプチェーンを構成します.あるインスタンスの属性または方法を呼び出すと、まずこのインスタンスから変数または方法を探して、見つけたら戻ります.さもなくば探しますプロト.指すプロトタイプの対象は、まだ見つけられていないと探し続けます.プロト.指し示すオブジェクトは、プロトタイプチェーンの最後まで見つけられます.私たちはこのようなルックアップによって継承を実現することができます.
JavaScriptでは、私たちが作成した関数ごとにプロトタイプの属性があります.この属性はオブジェクトで、特定のタイプのすべてのインスタンスで共有できる属性または方法を保存する用途があります.すなわち、ある関数Personのプロトタイプに属性または方法を追加すると、Personを構成関数として生成したすべての例が属性または方法にアクセスできる.
<script type="text/javascript">
// Person Person
function Person(){}
var person1 = new Person();
var person2 = new Person();
// Person name sayName
// ,
Person.prototype.name = "Peter";
Person.prototype.sayName = function(){return this.name;};
//
alert(person1.name); //Peter
alert(person2.name); //Peter
alert(person1.sayName()); //Peter
alert(person2.sayName()); //Peter
// ,prototype ( )
person1.name="Billy";
alert(person1.name); //Billy
delete person1.name;
alert(person1.name); //Perter
// hasOwnProperty()
alert(person1.hasOwnProperty("name"));//false
person1.name="Jack";
alert(person1.hasOwnProperty("name"));//false
</script>
2.原型、構造関数と実例の関係
関数を定義すると、そのデフォルトのプロトタイプオブジェクトが発生します.このプロトタイプオブジェクトは、この関数を指すconstrutor属性を持っています.この関数を使って作成されたすべてのインスタンスの中には、一つのポインターが含まれています.プロト.prototypeオブジェクトを指します(IE 8ではこのポインタにアクセスできません):
<script type="text/javascript">
function Person(){}
alert(Person.prototype); //[object Object]
//prototype constructor Person
alert(Person.prototype.constructor); //function Person(){}
alert(Person.prototype.constructor == Person);//true
// __proto__ Person.prototype
//IE
var person = new Person();
alert(person.__proto__); //[object Object]
alert(person.__proto__==Person.prototype); //true(IE false)
</script>
3.プロトタイプチェーンと継承
プロトタイプは対象ですので、必ず一つのタイプがあります.プロト.コンパスは構造関数のプロトタイプのオブジェクトを指しています.同じように、このプロトタイプのオブジェクトはもう一つあります.プロト.コンパスは構造関数のプロトタイプオブジェクトを指しています.このようにして、Object.prototypeまで環をします.これはプロトタイプチェーンを構成します.あるインスタンスの属性または方法を呼び出すと、まずこのインスタンスから変数または方法を探して、見つけたら戻ります.さもなくば探しますプロト.指すプロトタイプの対象は、まだ見つけられていないと探し続けます.プロト.指し示すオブジェクトは、プロトタイプチェーンの最後まで見つけられます.私たちはこのようなルックアップによって継承を実現することができます.
function SuperType(name)
{
this.name = name;
}
SuperType.prototype.sayName = function(){
alert(this.name);
};
function SubType(name, age)
{
SuperType.call(this, name);
this.age = age;
}
SubType.prototype = new SuperType();
SubType.prototype.sayAge = function()
{
alert(this.age);
};