js入門(十)——原型

3085 ワード

案内する
        いかなる方法でも、加えてこそ実行を表します.加えないと、この方法のアドレスを新しい変数に割り当てるだけです.
        次のコードに
		function Person(name){
			this.name = name;
			this.say = function(){
				document.write("my name is"+this.name);
			}
		}
		var p1 = new Person("lil");
		var p2 = new Person("lil2");
		alert(p1.say == p2.say);//false
        毎回newでPersonオブジェクトを作成すると、say方法は新しく作成されますので、p 1.sayとp 2.sayは同じではありません.しかし、2つの方法の内容は全く同じで、オブジェクトを作成するたびに新しい方法を作成する必要はありません.
        したがって、sayをPersonの外に定義することができる.以下のとおりです
		function Person(name){
			this.name = name;
			this.say = say;
		}
		function say(){
			document.write("my name is"+this.name);
		}
		var p1 = new Person("lil");
		var p2 = new Person("lil2");
		alert(p1.say == p2.say);//true
        これはp 1のsayが指すp 2のsayと同じブロック記憶空間(すなわちグローバルsay方法記憶位置)を指すからである.しかし、大域的な方法として定義された後は、この方法はどこでも使用できます.Personオブジェクトだけが使用できるという保証はできません.
基礎
        各関数は、作成時にプロトタイプ属性(プロトタイプを指す)があり、この属性はポインタであり、常にオブジェクト(プロトタイプ)を指します.このオブジェクトは指定された属性と方法を記憶するためのものです.したがって、この属性を使用することは、ある属性および方法をすべてのインスタンスで共有する役割を果たすことができる.したがって,プロトタイプを用いてガイド中の欠陥を遮蔽することができる.次のとおりです
		function Person(){
			
		}
		var obj = Person.prototype;//         ,         obj
		obj.say = function(){
			alert("sayname");
		};
		var p1 = new Person();
		var p2 = new Person();
		document.write(p1.say == p2.say);//true。  say     Person    ,             。
        コンストラクタ.prototype=原型オブジェクトです.原型の対象.constructor=コンストラクタ.
        プロトタイプは、関数名のみで原型を取得することができます.オブジェクト・プロトタイプは使用できません.
原型オブジェクトの指定
        プロトタイプにカスタムオブジェクトを指定することができます.このオブジェクトはこの関数のプロトタイプとなります.以下のとおりです
		function Person(){
		}
		// Person          
		Person.prototype = {
			name:"name",
			say:function(){
				document.write("  say  ");
			}
		}
		var p1 = new Person();
		document.write(p1.say());//            say   
        プロトタイプのオブジェクトをカスタマイズした場合、プロトタイプのコントローラが指定されていない場合、プロトタイプの構造方法はObjectの構造方法です.したがって、オリジナルオブジェクトをカスタマイズする場合は、必ずコントローラを指定します.対象の最初の行に加えて、constructor:Personです.しかし、この方法を使用する場合、constructorは列挙されますが、デフォルトではconstructorは列挙されてはいけないはずです.この問題を避けるために、Object.defineProperty()を使うべきです.
説明
        プロトタイプはオブジェクトであるため、オブジェクトに属性と方法を定義する方法でプロトタイプに属性と方法を指定することができます.プロトタイプの属性または方法がインスタンスオブジェクトと同じである場合、インスタンスオブジェクトはプロトタイプ中の対応する属性または方法をカバーする.以下のとおりです
       function Person(){

       }
       var obj = Person.prototype;
       obj.name = "prototype";
       var p1 = new Person();
       p1.name = "p1";
       document.write(p1.name);//       name  ,      p1
       document.write("<br/>");
       var p2 = new Person();
       document.write(p2.name);//      name "prototype"
         オブジェクトの属性を読み込むと、会議が始まります.
まず最初に
オブジェクト内で検索します.属性があるかどうかを確認し、ある場合は戻ります.ない場合は、そのオブジェクトのプロトタイプの中で検索を続け、ある場合は戻り、ない場合はundefinedに戻ります.
        プロトタイプの属性値を読みたいなら、Object.get ProttypeOf()でプロトタイプの属性を取得し、プロトタイプの属性を読み取ります.または、オブジェクトの該当属性をそのまま削除します.