コメントの説明は非常に詳細であるため、ここではあまりナンセンスについて話すことはありません。コードを入力するだけです。
<script type = "text/javascript"> // ecma-262は、オブジェクトを次のように定義します。「属性のコレクションは、基本的な値、オブジェクト、または関数を含めることができる順序属性のコレクション」//オブジェクトを理解する最も簡単な方法は、オブジェクトのインスタンスを作成し、itに属性とメソッドを追加することです。 person.name = "xulei"; person.age = "23"; person.job = "フロントエンジニア"; person.sayname = function(){alert(this.name); } // var person = {name: "xulei"、age:23、job: "front-end eingineering"、sayname:function(){alert(this.name)}} // 1を書くこともできます。属性タイプ:データ属性およびアクセスその属性// 1。データ属性には、その動作を記述する4つの特性があります// [構成可能]:属性を削除して属性を再定義できるか、属性を変更できるかどうかを示します。属性をアクセサ属に変更できるかどうか、デフォルト値は真です//値はtrue // [value]:この属性のデータ値が含まれます。デフォルト値は未定義ですvar iner = {name: "xulei"} //個人オブジェクトがここに作成され、値値は「xulei」//プロパティのデフォルトプロパティ、ecmascript5のオブジェクト、defineproperty(プロパティが配置されているオブジェクト、プロパティの名前、記述オブジェクト)// object.defineProperty(peron、 "name"、{writable:false、//プロパティを変更できません: "xu lei-xulei"}); alert(peron.name); // xu lei-xulei peron.name = "xu lei"; alert(peron.name); // xu lei-xulei //上記の操作は非ストリクトモードで無視されます。例外が厳密なモードでスローされた場合//属性が構成不能であると定義されると、構成可能に戻すことはできません。 //ほとんどの場合、Object.defineProperty()メソッドによって提供されるこれらの高度な機能を利用する必要はありません。しかし、JavaScriptを理解するのに非常に役立ちます。 //読者は、この方法をIE8で使用しないことをお勧めします。 // 2。そのプロパティへのアクセスには4つの特性があります// [構成可能]:属性を削除して属性を再定義できるかどうか、属性の特性を変更できるかどうかを示します。属性をアクセサ属性に変更できるかどうか、デフォルト値は真です// // [set]:属性を作成するときに呼び出される関数のデフォルト値var book = {_year:2004、edition:1} object.defineProperty(book、 "year"、{get:function(){return this._year;}、set:function(value){if> 2004; book.year = 2005; alert(book.edition); // 2 //オブジェクトを作成// 1。コンストラクターを関数担当者(名前、年齢、ヨブ)として扱います{this.name = name; this.age = age; this.job = job; this.sayname = function(){alert(this.name); }} // var person = new person( "xulei"、23、 "software"); person.sayname(); // person( "xulei2"、23、 "job2"); // window.sayname(); //別のオブジェクトの範囲でvarを呼び出しますo = new object(); person.call(o、 "xulei3"、23、 "job3"); o.sayname(); </script>別の段落を持ってみましょう:
<script type = "text/javascript"> // 1。プロトタイプオブジェクトを理解する// 2。プロトタイプおよびオペレーター// 3。よりシンプルなプロトタイプ構文// 4。プロトタイプのダイナミティ// 5。ネイティブオブジェクトプロトタイプ// 6。プロトタイプオブジェクトの問題// 1。関数が作成されるたびに、特定のルールセットに基づいて関数に対してプロトタイプ属性が作成されます。この属性は、関数//のプロトタイプオブジェクトをデフォルトで指します。すべてのプロトタイプオブジェクトは、プロトタイプ属性がfunctions(){} //person.prototype.constuctorが存在するように// functionの属性が配置されている関数へのポインターを含むコンストラクター(コンストラクター)属性を自動的に取得します。他の方法については、オブジェクトから継承されます。///は新しいインスタンスを作成するための呼び出しがあります。インスタンスには、コンストラクターのプロトタイプオブジェクトを指すポインター(内部プロパティ)が含まれています。 alert(person.prototype.isprototypeof(p1))alert(object.getPrototypeof(p1)== person.prototype)//プロトタイプに保存された値はオブジェクトインスタンスを介してアクセスできますが、プロトタイプの値はオブジェクトインスタンスを介して書き直すことはできません。インスタンスに//プロパティの名前とプロパティの名前を追加すると、プロトタイプのインスタンスと同じである場合、インスタンスでプロパティを作成すると、プロパティはプロトタイプのプロパティをブロックします。 EG:function person(){} person.prototype.name = "amber"; person.prototype.age = 23; person.prototype.job = "ソフトウェアエンジニア"; person.prototype.sayname = function(){alert(this.name)} var person1 = new Person(); var person2 = new Person(); person1.name = "amber.xu"; alert(person1.name); // amber.xu - from instance alert(person2.name); // amber - fromプロトタイプdelete person1.name; alert(person1.name); // amber - プロトタイプから// hasownProperty()メソッドを使用して、インスタンスまたはプロトタイプにプロパティが存在するかどうかを検出します。この方法(オブジェクトから継承)// true function person(){} person.prototype.name = "amber"; person.prototype.age = 23; person.prototype.job = "ソフトウェアエンジニア"; person.prototype.sayname = function(){alert(this.name)} var person1 = new Person(); var person2 = new Person(); alert(person1.hasownproperty( "name")); // false from the instance alert(person2.hasownproperty( "name")); alert(person1.name); alert(person1.hasownproperty( "name")); //インスタンスからtrue delete person1.name; alert(person1.name); alert(person1.hasownproperty( "name")); // false from the prototype // 2。プロトタイプとオペレーター//それを使用する2つの方法があります。1つは個別に使用され、オンに使用されます。単独で使用すると、オブジェクトが特定のプロパティにアクセスできるときにオペレータがtrueを返します//プロパティがプロトタイプまたはinstance function person(){} person.prototype.name = "amber"; person.prototype.age = 23; person.prototype.job = "ソフトウェアエンジニア"; person.prototype.sayname = function(){alert(this.name)} var person1 = new Person(); var person2 = new Person(); arert( "name in person1); // true from prototype alert(" name in person2); // true from prototype alert( "height" in person1); // false //この方法で関数をカプセル化できます(指定されたプロパティは、指定されたオブジェクトのプロトタイプです)関数は、name(name){return! } alert("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Returns allプロトタイプとインスタンスプロパティの両方を含むオブジェクトを介してアクセスできる列挙性プロパティ。 // var o = {function(){var prop in o);オブジェクトを引数として受け入れます。 person.prototype.age = 23; person.prototype.job = "ソフトウェアエンジニア"; person.prototype.sayname = function(){alert(this.name)} var person1 = new Person(); var person2 = new Person(); var keys = object.keys(person.prototype); alert(keys)person1.name = "amber.xu"; person1.age = 23; var keys = object.keys(person1);アラート(キー) alert("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------名前:「amber」、ヨブ:「ソフトウェア」、function(){alert(this.name)} // alert(friend instanceof object)// true alert(friend.constructor == person); // false alert(friend.constructor == object); // true //コンストラクターがあなたにとって本当に重要である場合、function person(){} person.Person.PROTOTOTOTE = {constructor:sead: "amber:" alert(this.name)}} var friend = new Person();アラート( "手動で設定されています constructor----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // object.defineProperty(inumerable:false:person})を使用できます。インスタンスとプロトタイプの間で、インスタンスとプロトタイプの間の接続は単なるポインターであり、コピーではなく、Sayhi()メソッドを呼び出す場合、最初にSayhiという名前のメソッドをインスタンスで検索し、見つからない場合はプロトタイプを検索します。 //ただし、プロトタイプオブジェクト全体を書き直すと、状況は異なります。 //コンストラクターを呼び出すと、元のプロトタイプへのプロトタイプポインターがインスタンスに追加され、プロトタイプを別のオブジェクトに変更することが、コンストラクターと元のプロトタイプ間の接続を切り取ることに相当することがわかります。 //覚えておいてください:インスタンスのポインターは、コンストラクターではなく、プロトタイプのみを指します。例:関数a(){} var a1 = new a(); a.prototype = {constructor:a、name: "amber"、age:23、job: "software"、sayname:function(){alert(this.name)}}} alert("ERROR------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Even allネイティブリファレンスタイプは、このパターンを使用して作成されます//コンストラクターのプロトタイプで定義されています:alert(typeof array.prototype.sort); string.prototype.startswith = function(text){return this.indexof(text)== 0; }; var msg = "hello";アラート(msg.startswith( "h")); //これを行うことはお勧めしません。 Alert( "プロトタイプオブジェクトのプロトタイプ問題"); // 6。プロトタイプの例関数ques(){} ques.prototype = {constructor:ques、name: "amber"、age:23、job: "it"、friends:["zhang san"、 "li si"]、//参照型saysname:function(){alert(this.name)}}; var q1 = new ques(); var q2 = new ques(); q1.friends.push( "wang wu");アラート(Q1.Friends); // alert(q2.friends); // alert(q1.friends === q2.friends); //誰もが問題を見てきたと思います。 Q1とQ2の2つのインスタンスを作成し、Q1の「Wang Wu」をQ1の「Friends」に追加したとき、Q2の「友人」にも3つの「Wang San、Li Si、およびWang Wu //」がありました。この記事はここで終了します。将来、JavaScriptのオブジェクト指向プログラミングについて引き続き議論します。誰もがそれを好きになることを願っています。