js17---建立對象:建構函式式和原型組合模式、動態原型模式、穩妥建構函式式

來源:互聯網
上載者:User

標籤:執行個體   content   概念   function   技術總監   job   eof   --   body   

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html>    <head>        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />        <title>Untitled Document</title>        <script type=text/javascript charset=utf-8 >        //自訂原型對象會改變原型對象的構造器。        //原型的概念: 原型對象裡的所有屬性和方法 被所有建構函式執行個體化出來的對象所共用        function Person(){}        Person.prototype = {            constructor:Person ,             name: ‘z3‘ ,             age:  20 ,             job : ‘程式員‘ ,            friends : [‘李四‘,‘王五‘] ,            sayName : function(){alert(‘我的名字!‘)}        };            var p1 = new Person();        var p2 = new Person();            p1.friends.push(‘趙六‘);//數組的.push方法        alert(p1.friends);//改了        alert(p2.friends);                //我們一般組合使用建構函式式和原型模式,在實際開發中,這種模式也是應用的最為廣泛。        // 組合使用原型和建構函式式 (定義一個類 開發時常用的方式),不能只用建構函式式或只用原型式。        function Person(name , age , friends , job){            this.name = name ;             this.age  = age ;             this.friends = friends ;            this.job = job ;        }        Person.prototype = {            constructor: Person ,             sayName : function(){                alert(this.name);//誰調用sayName,this就是誰            }        };        var p1 = new Person(‘z3‘ , 20 , [‘王五‘,‘趙六‘] , ‘技術總監‘);        var p2 = new Person(‘李四‘, 25 , [‘王五‘,‘趙六‘ ,‘趙7‘] ,‘boss‘);        alert(p1.friends);        p1.sayName();        alert(p2.friends);        p2.sayName();                                                //動態原型模式:(讓你的代碼 都封裝到一起)。動態原型模式:就是把資訊都封裝到函數中,這樣體現了封裝的概念。        function Person(name , age , friends , job){            this.name = name ;             this.age  = age ;             this.friends = friends ;            this.job = job ;            //動態原型方法:            if( typeof this.sayName != ‘function‘){//第一次new一個Person的時候會在原型添加這個方法,第二次new Person對象的時候就不會建立了。typeof是小寫function,constructor是大寫的Function                Person.prototype.sayName = function(){                    alert(this.name);                }            }        }            /*                var o = {            name:2,            age:"22"        }        alert(o.sayName);//undefined        alert(typeof o.sayName);//undefined        */                                        //穩妥建構函式式: durable object(穩妥對象) 非常安全的環境中        // 1 沒有公用屬性 , 2 不能使用this對象        function Person(name , age , job){                // 建立一個要返回的對象,原廠模式,                var obj = new Object();                //可以定義一下私人的變數和函數 private,js裡面是var局部變數,外部存取不了,內建函式使用,類似於java裡面通過private聲明一些變數方法。                var name = name ;                 //var sex = ‘男‘;                //var saySex = function(){};                //添加一個方法                obj.sayName = function(){                    alert(name);                }                return obj ;                        }        var p1 = new Person(‘張三‘);        p1.sayName();        </script>    </head>    <body>    </body></html>

 

js17---建立對象:建構函式式和原型組合模式、動態原型模式、穩妥建構函式式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.