JavaScriptオブジェクト向けプログラミングの作成対象

11533 ワード

参考資料は相変わらず「JavaScript高級プログラム設計」です.この本はとてもいいと言わざるを得ません.話がとてもはっきりしていて、いい本です.
まず重点ノートを与えて、次の三つのノートをよく理解することが大事です.
1.インスタンスのポインタはプロトタイプだけを指し、コンストラクタを指しません.いつでもプロトタイプに属性と方法を追加してもよく、修正はすべてのオブジェクトインスタンスにすぐに表現できますが、プロトタイプオブジェクト全体を書き換えると、状況が違ってきます.コンストラクタを呼び出すと、インスタンスに最初のプロトタイプを指す_を追加します.プロトプロトタイプを他のオブジェクトに変更すると、構造関数と最初のプロトタイプとの間の連絡が切断されます.2.製品化の手順で元のオブジェクトの原型を修正することを勧めません.3.カスタムタイプを作成する最も一般的な方法は、コンストラクションモードとプロトタイプモードを組み合わせて使用することです.コンストラクターモードは例示的な属性を定義するために使用され、プロトタイプモードは方法と共有属性を定義するために使用される.結果として、各インスタンスは、自分のインスタンス属性のコピーを持っていますが、同時に方法の参照を共有しています.メモリを最大限に節約します.また,この混成モードは構造関数へのパラメータ伝達をサポートしており,2つのモードのセットの長さとも言える.
以下のコードは4つの構築方法のデモを提供します.
1.工場モード
2.コンストラクタ
3.対象の原型
4.コンストラクタとオブジェクトプロトタイプの組み合わせモード
 1 <!DOCTYPE html>

 2 <html lang="en">

 3 <head>

 4     <meta charset="UTF-8">

 5     <title></title>

 6 </head>

 7 <body>

 8 <script language="JavaScript">

 9 //        

10 //    var person = new Object();

11 //    person.name = "Nicholas";

12 //    person.age = 29;

13 //    person.job = "Software Engineer";

14 //

15 //    person.sayName = function(){

16 //        alert(this.name);

17 //    };

18 //

19 //    person.sayName();

20 

21 //        

22 //    function createPerson(name,age,job){

23 //        var o = new Object();

24 //        o.name = name;

25 //        o.age = age;

26 //        o.job = job;

27 //        o.sayName = function(){

28 //            alert(this.name);

29 //        };

30 //        return o;

31 //    }

32 //

33 //    var person1=createPerson("Nicholas",29,"Softwar Enginner");

34 //    var person2=createPerson("Greg",27,"Doctor");

35 //    person1.sayName();

36 //    person2.sayName();

37 

38 //          

39 //

40 //    function Person(name,age,job) {//               ,  ,       

41 //        this.name = name;

42 //        this.age = age;

43 //        this.job = job;

44 //        this.sayName = function(){//sayName         ?

45 //            alert(this.name);

46 //        };

47 //    }

48 //    var person1 = new Person("Nicholas",29,"Software Enginner");

49 //    var person2 = new Person("Geeg",27,"Doctor");

50 //

51 //    person1.sayName();

52 //    person2.sayName();

53 //    alert(person1 instanceof Person);

54 //    alert(person2 instanceof Person);

55 //    alert(person1 instanceof Object);

56 //    alert(person2 instanceof Object);

57 //    Person("zhouge",21,"Studet");

58 //    window.sayName();

59 //    var o = new Object();

60 //    Person.call(o,"xiaoli",55,"singer");

61 //    o.sayName();

62 //                   

63     function Person(name,age,job){

64         this.name=name;

65         this.age=age;

66         this.job=job;

67         this.friends=["Shelby","Court"];

68     }

69 

70     Person.prototype={

71         constructor:Person,

72         sayName:function(){

73             alert(this.name);

74         }

75     }

76 

77     var person1=new Person("li",22,"SE");

78     var person2=new Person("zhang",23,"CS");

79     person1.friends.push("Van");

80     alert(person1.friends);

81     alert(person2.friends);

82     alert(person1.friends=== person2.friends);

83     alert(person1.sayName === person2.sayName);

84 </script>

85 </body>

86 </html>