JAvascriptオブジェクト不完全探索記録03:若者、オブジェクトはどうやって来たの?前編
4061 ワード
お知らせ:作者の坑道登りの記録は、あなたなどの大神にはまったく価値がありません.私の命を無駄にしないでください.
まず、正直に言うと、javascriptには向いていません.先端に接触して10年近く経った古い先端(偽)として、ずっと理解を求めずに持ってきた主義を発揚しています.他の人が書いた機能が正しいのを見て、直接持ってきて使って、書いたコードが爆発するまで膨らんで、スクリーンいっぱいのjqueryの初級の使い方を見て、運がよくて間に合って走ることができて、問題が発生して顔がぼんやりしていて、心の中で自分を慰めて1万回私は設計したが、jsをきちんと整理するつもりなら最初から見なければなりません.
エラーの発生を元から止めてほしい.
最初から、顔オブジェクトプログラムの基礎を見直してみます.オブジェクトを作成するには、トンボビンJavaScriptのオブジェクトを見て、オブジェクトを作成する方法、オブジェクトを作成する方法、7つのモード-旗smileJSのオブジェクトを作成するいくつかの一般的な方法-ifcodeECMAScript定義クラスまたはオブジェクト-w 3 school(深さが良い、強くお勧め)を見ました.
私の相手が自分で書いた
相手がいなくて、自分で1つ作ればいいのではないでしょうか--あるベテランの黒魔法使いの先輩プログラマー
これは最も簡単なオブジェクトを創造する方法で、一言だけで簡単です.
手をこすって、次は彼女に属性と方法を追加して、彼女をもっと真実に見せる(意味がある)
また、より直接的で読み取り可能な方法で作成することもできます.
これで比較的完全なオブジェクトが作成され、内部プロパティを任意に表示して内部メソッドを呼び出すことができます.
この方式の利点は、単純で直接的で、理解しやすいことであり、欠点は単一のオブジェクトしか作成できないことであり(どうしたいのか)、私たちの応用/後宮では、複数のインスタンスオブジェクトを作成する必要があることが多い.これは、オブジェクト/後宮漫向けの意味ではないでしょうか.
オブジェクトの一括生成
上記の危険な考え方に対して、私たちの考え方は、オブジェクトを生成し、実行関数のように、異なるパラメータを入力して自動的に通じないインスタンスオブジェクトを生成することができれば、非常に便利ではないかということです.実際には、私たちもこのようにする最も簡単な考え方は、私たちの上の方法を関数にカプセル化することです.
その結果,我々が見たように,2つの異なるオブジェクトエンティティを作成し,彼女たちは同じ属性名を持っているが確かに異なる属性値を持っている.これは,坊間が言ったファクトリモードである.振り返って考えると,我々は2つのオブジェクトインスタンスを作成することに成功したが,この2つの対象は
長い間、生成されたReiはgirlFriendではなく、似ているように見えるだけだ/複製品
では、jsの関数はすべてオブジェクトである以上、このような関数/オブジェクトがあるかどうか、彼自身がパラメータを入力して、それから彼自身をテンプレートとして同じタイプのインスタンスオブジェクトを創造することができます.jsには構造関数という特殊な関数が提供されています.彼の任務は私たちの要求/伝達のパラメータに基づいています.自分のタイプと同じオブジェクトを作成する、という作成方法が噂のコンストラクション関数法です
これがコンストラクション関数です.彼の使用は、パッケージされたjsライブラリを多く呼び出すのと同じように、jsライブラリの作成者が事前に定義したオブジェクト(これは会話であり、コンストラクション関数にはオブジェクトがありません)を自分のニーズに合わせてインスタンス化する具体的な方法です.
コンストラクション関数は特殊な関数であり、
1.新しいオブジェクトを作成
2.コンストラクション関数の役割ドメインを新しいオブジェクトに割り当てます(つまり、thisは新しいオブジェクトを指し、thisを介してのみアクセスできます).
3.コンストラクタ内のコードの実行
4.新しいオブジェクトを返す
jsファクトリモード、コンストラクション関数、およびオブジェクトを作成するメリットとデメリットの一部を引用します.-第6.2.1節-flyingpig 2016
振り返って以下を調べる
今回はOK、ReiもAsukaも妥当なのはgirlFriendだ
もちろん、このような作成モードには、いくつかの問題があり、他の作成モードもあります.次のブログで穴を踏み続けます.
ここまで見えるのは死んだ家だろう
まず、正直に言うと、javascriptには向いていません.先端に接触して10年近く経った古い先端(偽)として、ずっと理解を求めずに持ってきた主義を発揚しています.他の人が書いた機能が正しいのを見て、直接持ってきて使って、書いたコードが爆発するまで膨らんで、スクリーンいっぱいのjqueryの初級の使い方を見て、運がよくて間に合って走ることができて、問題が発生して顔がぼんやりしていて、心の中で自分を慰めて1万回私は設計したが、jsをきちんと整理するつもりなら最初から見なければなりません.
エラーの発生を元から止めてほしい.
最初から、顔オブジェクトプログラムの基礎を見直してみます.オブジェクトを作成するには、トンボビンJavaScriptのオブジェクトを見て、オブジェクトを作成する方法、オブジェクトを作成する方法、7つのモード-旗smileJSのオブジェクトを作成するいくつかの一般的な方法-ifcodeECMAScript定義クラスまたはオブジェクト-w 3 school(深さが良い、強くお勧め)を見ました.
私の相手が自分で書いた
相手がいなくて、自分で1つ作ればいいのではないでしょうか--あるベテランの黒魔法使いの先輩プログラマー
これは最も簡単なオブジェクトを創造する方法で、一言だけで簡単です.
var girlFriend = {};
手をこすって、次は彼女に属性と方法を追加して、彼女をもっと真実に見せる(意味がある)
girlFriend.name = "REI";
girlFriend.moeType = "silent";
girlFriend.hairColor = "blue";
girlFriend.sayHello = function(){
return "..."
}
また、より直接的で読み取り可能な方法で作成することもできます.
var girlFriend = {
name : "REI",
moeType : "silent",
hairColor : "blue",
sayHello : function(){
return "..."
}
}
これで比較的完全なオブジェクトが作成され、内部プロパティを任意に表示して内部メソッドを呼び出すことができます.
console.log(girlFriend.name)//REI
console.log(girlFriend.sayHello)//...
この方式の利点は、単純で直接的で、理解しやすいことであり、欠点は単一のオブジェクトしか作成できないことであり(どうしたいのか)、私たちの応用/後宮では、複数のインスタンスオブジェクトを作成する必要があることが多い.これは、オブジェクト/後宮漫向けの意味ではないでしょうか.
オブジェクトの一括生成
上記の危険な考え方に対して、私たちの考え方は、オブジェクトを生成し、実行関数のように、異なるパラメータを入力して自動的に通じないインスタンスオブジェクトを生成することができれば、非常に便利ではないかということです.実際には、私たちもこのようにする最も簡単な考え方は、私たちの上の方法を関数にカプセル化することです.
function GirlFriend(name,moeType,hairColor){
var girlFriend = {};
girlFriend.name = name;
girlFriend.moeType = moeType;
girlFriend.hairColor = hairColor;
girlFriend.sayHello = function(){
return moeType == 'silent'?"..." : "Ohayo!"
}
return girlFriend;
}
var rei = GirlFriend("Rei","silent","blue");
var asuka = GirlFriend("Atsuka","genki","red");
console.log(rei.sayHello());//...
console.log(asuka.sayHello());//Ohayo!
その結果,我々が見たように,2つの異なるオブジェクトエンティティを作成し,彼女たちは同じ属性名を持っているが確かに異なる属性値を持っている.これは,坊間が言ったファクトリモードである.振り返って考えると,我々は2つのオブジェクトインスタンスを作成することに成功したが,この2つの対象は
girlFriend
オブジェクトとして識別できない.彼女たちはもともと1つの関数の内部で実行する過程の中で創造されたので、間には何のつながりもありません.これは開発の中で私たちが源をたどるのに不利です.信じないで見てみましょう.console.log(rei instanceof GirlFriend);//false
長い間、生成されたReiはgirlFriendではなく、似ているように見えるだけだ/複製品
では、jsの関数はすべてオブジェクトである以上、このような関数/オブジェクトがあるかどうか、彼自身がパラメータを入力して、それから彼自身をテンプレートとして同じタイプのインスタンスオブジェクトを創造することができます.jsには構造関数という特殊な関数が提供されています.彼の任務は私たちの要求/伝達のパラメータに基づいています.自分のタイプと同じオブジェクトを作成する、という作成方法が噂のコンストラクション関数法です
GirlFriend = function(name, moeType, hairColor) {
this.name = name;
this.moeType = moeType;
this.hairColor = hairColor;
this.sayHello = function() {
return moeType == 'silent' ? "..." : "Ohayo!"
}
}
これがコンストラクション関数です.彼の使用は、パッケージされたjsライブラリを多く呼び出すのと同じように、jsライブラリの作成者が事前に定義したオブジェクト(これは会話であり、コンストラクション関数にはオブジェクトがありません)を自分のニーズに合わせてインスタンス化する具体的な方法です.
var rei = new GirlFriend("Rei", "silent", "blue");
var asuka = new GirlFriend("Atsuka", "genki", "red");
console.log(rei.sayHello());//...
console.log(asuka.sayHello());//Ohayo!
コンストラクション関数は特殊な関数であり、
new
と組み合わせて使用する必要があり、new
演算子を使用する際に以下の手順を実行します.1.新しいオブジェクトを作成
2.コンストラクション関数の役割ドメインを新しいオブジェクトに割り当てます(つまり、thisは新しいオブジェクトを指し、thisを介してのみアクセスできます).
3.コンストラクタ内のコードの実行
4.新しいオブジェクトを返す
jsファクトリモード、コンストラクション関数、およびオブジェクトを作成するメリットとデメリットの一部を引用します.-第6.2.1節-flyingpig 2016
振り返って以下を調べる
console.log(rei instanceof GirlFriend);//true
console.log(asuka instanceof GirlFriend);//true
今回はOK、ReiもAsukaも妥当なのはgirlFriendだ
もちろん、このような作成モードには、いくつかの問題があり、他の作成モードもあります.次のブログで穴を踏み続けます.
ここまで見えるのは死んだ家だろう