プロトタイプモードの説明
注:プロトタイプインスタンスを使用して、新しいカスタマイズ可能なオブジェクトをコピーして作成します。新しく作成されたオブジェクトの場合、元のオブジェクトを作成する特定のプロセスを知る必要はありません。
手順:prototype => new protoexam =>新しいオブジェクトへのクローン。
関連するコードを使用します:
コードコピーは次のとおりです。
function prototype(){
this.name = '';
this.age = '';
this.sex = '';
}
prototype.prototype.userinfo = function(){
'個人情報を返し、名前:'+this.name+'、age:'+this.age+'、gender:'+this.sex+'<br />';
}
現在、2つ以上の個人情報コンテンツが必要です。
コードコピーは次のとおりです。
var proto = new Prototype();
var person1 = object.create(proto);
person1.name = 'xiao ming';
person1.sex = 'male';
person1.age = 35;
person1.userinfo();
//
var person2 = object.create(proto);
person2.name = 'xiaohua';
person2.sex = '女性';
person2.age = 33;
person2.userinfo();
出力が返されます:
コードコピーは次のとおりです。
個人情報、名前:Xiao Ming、年齢:35、性別:男性
個人情報、名前:Xiaohua、年齢:33、性別:女性
プロトタイプモードは一般に複雑な抽象構造に使用されますが、コンテンツ構成は類似しており、抽象コンテンツはカスタマイズでき、新しい作成は要件を満たすために元の作成オブジェクトにわずかに変更する必要があります。
object.create命令
1>。定義:プロトタイプオブジェクトを指定し、オプションのカスタムプロパティを含めることができるオブジェクトを作成します。
2> object.create(proto [、properties]);オプション、新しいオブジェクトのプロパティの構成に使用されます。
コードコピーは次のとおりです。
1。Proto:新しいオブジェクトのプロトタイプを作成するには、nullでなければなりません。このプロトは、[new]またはobject.prototypeが作成された場合にのみ価値があります。
2。プロパティ:オプション、構造:
{
プロップフィールド:{
値: 'val' | {} | function(){}、
手紙:true | false、
列挙可能:true | false、
設定可能:true | false、
get:function(){return 10}、
セット:function(value){}
}
}
カスタム属性には、次の4つの属性があります。
値:カスタム属性値。
書き込み:このアイテムの値が編集可能かどうか、デフォルトはfalseであり、Trueの場合、obj.Prodfieldを割り当てることができます。それ以外の場合は読み取り専用。
列挙可能:列挙可能;
設定可能:configurable;
また、セット、Get Accessorメソッドを含めることもできます。
その中で、[set、get]は、価値と執筆と同時に表示されることはできません。
1.プロトタイプオブジェクトクラスを作成します。
コードコピーは次のとおりです。
function protoclass(){
this.a = 'protoclass';
this.c = {};
this.b = function(){
}
}
プロトタイプメソッドの作成:
コードコピーは次のとおりです。
protoclass.prototype.amethod = function(){
//this.a;
//this.b();
これを返してください。
}
使い方
1. protoclass.prototypeを使用してオブジェクトを作成します。
コードコピーは次のとおりです。
var obj1 = object.create(protoclass.prototype、{
foo:{value: 'obj1'、writable:true}
})
OBJ1には、プロトクラスプロトタイプメソッドアメソッド法があります。
コードコピーは次のとおりです。
obj1.amethod();
//未定義のメソッドにアクセスできるように出力され、Protoclassメンバーにアクセスできません
ただし、この方法は、プロトクラスの下でa、b、cのメンバープロパティを実行することはできません。
2。インスタンス化されたプロトクラスをプロトタイプとして使用します。
コードコピーは次のとおりです。
var proto = new Protoclass();
var obj2 = object.create(proto、{
foo:{value: 'obj2'}
});
この方法で作成されたOBJ2には、すべてのメンバー属性A、B、C、およびAMETHODプロトタイプのプロトクラス法があります。 Foo Readのみのデータ属性を追加します。
コードコピーは次のとおりです。
obj2.a; // protoclass
obj2.c:// [オブジェクト]
obj2.b(); //
obj2.amethod(); // protoclass
obj2.foo; // obj2
3。サブクラスの継承:
コードコピーは次のとおりです。
function subclass(){
}
subclass.prototype = object.create(protoclass.prototype、{
foo:{value: 'subclass'}
});
subclass.prototype.submethod = function(){
this.a ||を返しますthis.foo;
}
この方法は、Protoclassのアメソッド法から継承して実行できます。
コードコピーは次のとおりです。
var func = new subclass();
func.amethod(); //未定義、プロトクラスのメンバープロパティは読み取れません、a、b、c
func.submethod(); // subclass
サブクラスがプロトクラスのメンバープロパティを読み取るには、サブクラスを変更する必要があります。
コードコピーは次のとおりです。
functionsubclass()
{
protoclass.call(this);
}
//その他のコード;
この方法は、メンバープロパティとプロトタイプのプロトクラス方法を取得できます。
コードコピーは次のとおりです。
var func = new subclass();
func.amethod(); // protoclass
func.submethod(); // protoclass
別の方法は、インスタンス化されたプロトクラスオブジェクトをサブクラスのプロトタイプとして使用することです。
コードコピーは次のとおりです。
var proto = new Protoclass();
function subclass(){
}
subclass.prototype = object.create(proto、{
foo:{value: 'subclass'}
});
このようにして、サブクラスがインスタンス化された後、すべてのプロトクラスプロパティとプロトタイプメソッドを取得し、読み取り専用のデータ属性FOOを作成できます。
コードコピーは次のとおりです。
var func = new subclass();
func.foo; //サブクラス
func.a; // protoclass
func.b(); //
func.c; //[物体]
func.amethod(); // protoclass
4.継承を作成するもう1つの方法は、Object.Createのプロトタイプ用のインスタンス化されたプロトクラスと同じです。
コードコピーは次のとおりです。
function subclass(){
this.foo = 'subclass'; //しかし、それはここで読んで書くことができます
}
subclass.prototype = new Protoclass();
Object.Create関連の手順
object.createは、新しいオブジェクトを作成するために使用されます。それがオブジェクトである場合、プロトタイプはnullであり、その効果は新しいオブジェクト()と一致しています。または {};
関数の場合、関数は新しい関数名と同じです。
コードコピーは次のとおりです。
// 1つのオブジェクト
var o = {}
//に相当します
var o2 = object.create({});
//コンストラクターは同じです。
// ------------------------------------------------
function func(){
this.a = 'func';
}
func.prototype.method = function(){
これを返してください。
}
var newfunc = new func();
// [効果は同じ]に相当します
var newfunc2 = object.create(object.prototype/*function.prototype || function(){}*/、{
A:{value: 'func'、writable:true}、
方法:{value:function(){return this.a;}}
});
しかし、NewFuncとNewFunc2は、機能の参照がオブジェクトを作成するために異なります。
newFuncはfunction func(){...}、newfunc2は関数{native}です
コードコピーは次のとおりです。
object.create(proto [、propertiesfield]):
Protoは、値が必要であり、nullになる可能性があることを示します。設定されていない場合、例外がスローされます。
Protoは非ヌル、つまりインスタンス化された値、つまり新しい値です。 JavaScriptのほとんどのオブジェクトには、コンストラクター属性があります。属性は、オブジェクトがインスタンス化される機能を示します。
PropertiesFieldはオプションであり、新しく作成されたオブジェクトに必要なメンバープロパティまたはメソッドを設定します。