JSカスタムオブジェクトの理解
3710 ワード
JavaScriptは、正面から対象言語に向かっているものです.プログラミング思想です.
相手は何ですかオブジェクトは、属性と方法の集合体である.属性:データの保存方法:実行する動作 オブジェクトのカスタマイズ
1.字面量2.工場モード3.構造関数モード4.原型モード5.混合モード(プロトタイプモードと構造関数モードの混合)
文字の量長所:簡単で分かりやすいです. 欠点:量産できない 長所:対象の量産を実現した 欠点:対象が誰によって生産されたか検出できない
すべての属性と方法はthisで定義され、newキーワードで呼び出されます.
newキーワードは何をしましたか?1.新しいオブジェクトを作成します.2.新しいオブジェクトにthisを向けます.3.構造関数を実行するコード4.この新しいオブジェクトに戻ります.利点:誰によって作成されたかを識別することができない解決策 欠点:同じ方法を実現すると、それぞれ新しい空間を作ってこれらの方法を保存します.これは空間の浪費をもたらします. 利点:継承を実現し、構造関数の空間浪費の問題を解決しました. 欠点:カスタマイズできない
彼ら2つの長所を結びつけた.
相手は何ですか
:obj = {
name:12,
age:13,
skill:function(){}
}
//name,age: obj , ,
//skill: obj
1.字面量2.工場モード3.構造関数モード4.原型モード5.混合モード(プロトタイプモードと構造関数モードの混合)
文字の量
var obj={
name:' ',
age:78,
skill:function(){
console.log(' ');
}
}
console.log(obj['name']);//
obj.skill();//
工場関数モードfunction factory(name,age,callback){
return {
name:name,
age:age,
callback:callback,//
skill:function(){ //
console.log(' ');
}
}
}
var girlFriend = factory(' ',18);
console.log(girlFriend);//{name: " ", age: 18, skill: ƒ, callback: undefined}
var girlFriend2 = factory(' ',81);
console.log(girlFriend2); //{name: " ", age: 81, skill: ƒ, callback: undefined}
console.log(girlFriend==girlFriend2);//false
var girlFriend = factory(' ',20,function(){
console.log(" !");
});
//
girlFriend3.callback();
コンストラクタモードすべての属性と方法はthisで定義され、newキーワードで呼び出されます.
newキーワードは何をしましたか?1.新しいオブジェクトを作成します.2.新しいオブジェクトにthisを向けます.3.構造関数を実行するコード4.この新しいオブジェクトに戻ります.
function Human(type,name,gender,age){
this.type = type;
this.name = name;
this.gender = gender;
this.age = age;
this.skill = function(){
console.log(' ');
}
}
var shiyan = new Human(' ',' ',' ',20);
console.log(shiyan);//Human {type: " ", name: " ", gender: " ", age: 20, skill: ƒ}
var xiawa = new Human(' ',' ',' ',1000);
console.log(xiawa);//Human {type: " ", name: " ", gender: " ", age: 1000, skill: ƒ}
console.log(xiawa.__proto__.constructor);//
console.log(xiawa.skill==shiyan.skill);//false
プロトタイプfunction Animal(){};
Animal.prototype.type='cat';
Animal.prototype.skill=function(){
console.log('eat')
}
var mao = new Animal();
mao.skill();//eat
var mao2 = new Animal();
mao2.skill();//eat
console.log(mao.skill==mao2.skill);//true
console.log(mao2==mao);//false
混合モード(プロトタイプモードとコンストラクターモードの結合)彼ら2つの長所を結びつけた.
function Student(cls,name,age,gender,num){
this.cls=cls;
this.name=name;
this.age=age;
this.gender= gender;
this.num = num;
}
// , ,
Student.prototype.skill=function(){
console.log(' ');
}
var student1 = new Student('01',' ',12,' ','0101');
console.log(student1);
var student2 = new Student('01',' ',12,' ','0101');
console.log(student1.skill==student2.skill);//true
console.log(student1==student2);//false
//student.gender
console.log(student1.gender==student2.gender);//true