JavaScript――作成対象の5つの方法分析(工場モデル原型構造関数)

4794 ワード

まずJavaScriptの中の方法を明確にします.3種類の方法、オブジェクト方法、プロトタイプ方法、作成対象の鍵は定義方法JavaScriptの中の関数です.関数名はオブジェクト参照です.
既存のオブジェクトに基づいて属性と方法を拡張します.
var object = new Object();
object.name = "  ";//    
alert(object.name);
/       ,        
 object.sayHello = function(name)
{
    this.name = name;
   alert(this.name);
}
object.sayHello("  ");

設計モードにおける工場方式を利用する
        //            
       /* function CreatObject()
        {
            var object = new Object();
            object.name = "zhangsan";
            object.age = 20;

            object.get =  function()
            {
                alert( this.name + ":" +  this.age);
            }
            return object;
        }

        var object1 = new CreatObject();
        object1.get();
        */

//          
      /*  function CreatObject(name, age)
        {
            var object = new Object();

            object.name = name;
            object.age = age;

            object.get = function()
            {
                alert(this.name + ":" + this.age)
            }
            return object;

        }
        var object2 = new CreatObject("zhangsan", 20);
        object2.get();*/

//           ,                  ,        
//               ,                
//             

        function CreatObject(name, age)
        {

            var object = new Object();

            object.name = name;
            object.age = age;
            //             
            //        
            object.get = get;
            return object;
        }
//      :          
        function get()
        {
            alert(this.name + ":" + this.age)
        }

        var object = new CreatObject("  ", "10");
        object.get();
コンストラクタ方式

       /* function CreatObject()
        {
        //         ,js            
            this.name = "  ";
            this.age = 20;

            this.get = function()
            {
                alert(this.name + ": " + this.age);
            }
        //        return  ,            
        }

        var object = new CreatObject();
        object.get();*/

        //            
        function CreatObject(name, age)
        {
            this.name = name;
            this.age = age;

            this.get = function()
            {
                alert(this.name + ": " + this.age);
            }
        }

        var object = new CreatObject("  ", 30);
        object.get();

プロトタイプ方式
JavaScriptの各オブジェクトにはプロトタイプの属性があり、プロトタイプの属性はオブジェクトタイプの原型の参照に戻ります.
//    
       /* function  Person()
        {

        }

        Person.prototype.name = "  ";
        Person.prototype.age = 20;

        Person.prototype.get = function()
        {
            alert(this.name + ": " + this.age);
        }

        var person = new Person();
        person.name = "  ";
        person.get();*/


        function Person()
        {

        }

        Person.prototype.name = new Array();
        Person.prototype.age = 20;

        Person.prototype.get = function()
        {
            alert(this.name + ": " + this.age);
        }

        var object = new Person();
        var object2 = new Person();

        object.name.push("  ");
        object2.name.push("  ");
//          ,                  ,
//                     
        object.get();
        object2.get();
プロトタイプ+構造関数方式
//                          ,   
//            。     +           ,        
//   ,             

    function Person()
    {//                  
        this.name = new Array();
        this.age = 20;
    }

    Person.prototype.get = function()
    {
        alert(this.name + ": " + this.age);
    }

    var object = new Person();
    var object2 = new Person();

    object.name.push("  ");
    object2.name.push("  ");
    object.age = 30;

    object.get();//  :30
    object2.get();//  :20

ダイナミックプロトタイプ方式:
コンストラクタでは、マーカーの量によって、すべてのオブジェクトに一つの方法を共有させます.各オブジェクトは自分の属性を持っています.
 function Person(name, age)
        {
            this.name = name;
            this.age = age;

            //         
            if (typeof Person.flag == "undefined")
            {
                alert("    ");
                Person.prototype.get = function()
                {
                    alert(this.name + ": " + this.age);
                }
                Person.flag = true;
            }
        }

        var object = new Person("  ", 20);
        var object2 = new Person("  ", 30);

        object.get();
        object2.get();