JS面向(基於)對象編程--構造方法(函數)

來源:互聯網
上載者:User

標籤:

   建構函式(方法)介紹

   什麼是建構函式呢?在回答這個問題之前,我們來看一個需求:前面我們在建立人類的對象時,是先把一個對象建立好後,再給他的年齡和姓名屬性賦值,如果現在我要求,在建立人類的對象時,就直接指定這個對象的年齡和姓名,該怎麼做?

   建構函式(方法)是一種特殊的方法,它的主要作用是完成對對象執行個體的初始化。它有幾個特點:

  1. 建構函式(方法)名和類名相同。

  2. 在建立一個對象執行個體時,系統會自動的調用該類的構造方法完成對新對象的初始化。

   建構函式基本用法

function 類名(參數列表){    屬性=參數值;//不帶this為私人,帶有this為共有。}

   如下例:

function Person(name, age) {    this.name = name;//this指代當前對象(即執行個體化的對象)    this.age = age;}//建立Person對象的時候,就可以直接給名字和年齡var p1 = new Person("abc", 80);var p2 = new Person("hello", 9);window.alert(p2.name);

   當然,在給一個對象初始化屬性值的時候,也可以指定函數屬性。如下例:

<!DOCTYPE html><html><head>    <meta charset="UTF-8">    <title>建構函式</title>    <script type="text/javascript">        function jiSuan(num1, num2, oper) {            if(oper == "+") {                return num1+num2;            } else if(oper == "-") {                return num1-num2;            } else if(oper == "*") {                return num1*num2;            } else if(oper == "/") {                return num1/num2;            }        }        function Person(name, age, fun) {            this.name = name;            this.age = age;            this.myFun = fun;        }        var p1 = new Person("aa", 9, jiSuan);        var p2 = new Person("aa", 9, null);        // window.alert(p1.name);        // window.alert(p1.myFun(89, 90, "+"));        window.alert(p2.myFun(1, 2, "*"));//Uncaught TypeError: p2.myFun is not a function    </script></head><body>    </body></html>

   構造方法(函數)小結

  1. 構造方法名和類名相同

  2. 主要作用是完成對新對象執行個體的初始化

  3. 在建立對象執行個體時,系統自動調用該對象的構造方法   

   類定義的完善:

   在介紹了建構函式(方法)後,我們類(原型對象)的定義就可以完善一步:

function 類名() {    屬性;}

   ↓

function 類名() {    屬性;    函數(方法);  }

   ↓

function 類名(參數1, 參數2, ...) {    屬性 = 參數1;    函數(方法) = 參數2;  }

   

   

   物件導向編程進一步認識:

   建立對象的又一種形式

   1、對於比較簡單的對象,我們也可以這樣來建立(可以指定普通屬性和函數屬性),如:

<!DOCTYPE html><html><head>    <meta charset="UTF-8">    <title>建構函式</title>    <script type="text/javascript">        var dog = {name:"小狗",                    age:8,                     fun1:function(){window.alert("hello,world");},                    fun2:function(){window.alert("ok");}                   };         window.alert(dog.constructor);         window.alert(dog.name+dog.age);         dog.fun1();         dog.fun2();    </script></head><body>    </body></html>

   2、有時,會看到這樣一種調用方法:

函數名.call(對象執行個體);

   例,

<!DOCTYPE html><html><head>    <meta charset="UTF-8">    <title>建構函式</title>    <script type="text/javascript">        var dog={name:‘hello‘};        function test(){            window.alert(this.name);        }        test();        window.test();        var name = "阿昀";        //test.call(window);//輸出阿昀        test.call(dog); // <==> dog.test();    </script></head><body>    </body></html>

   3、for...in,如:

<!DOCTYPE html><html><head>    <meta charset="UTF-8">    <title>建構函式</title>    <script type="text/javascript">        var dog = {name:‘小名‘,                   sayHello:function(a,b){window.alert("結果="+(a+b));}                  };        //迴圈列出dog對象的所有屬性和方法 對象名[‘屬性名稱‘]        for(var key in dog){            window.alert(dog[key]);        }    </script></head><body>    </body></html>

   記住:可以使用該形式—對象名[‘屬性名稱‘]—訪問該對象中的屬性和方法。

   又如:

<!DOCTYPE html><html><head>    <meta charset="UTF-8">    <title>建構函式</title>    <script type="text/javascript">        document.writeln("****當前瀏覽器window對象有屬性和方法****<br/>");        for(var key in window){            document.writeln(key+":"+window[key]+"<br>");        }    </script></head><body>    </body></html>

 

 

  

JS面向(基於)對象編程--構造方法(函數)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.