標籤:
建構函式(方法)介紹
什麼是建構函式呢?在回答這個問題之前,我們來看一個需求:前面我們在建立人類的對象時,是先把一個對象建立好後,再給他的年齡和姓名屬性賦值,如果現在我要求,在建立人類的對象時,就直接指定這個對象的年齡和姓名,該怎麼做?
建構函式(方法)是一種特殊的方法,它的主要作用是完成對對象執行個體的初始化。它有幾個特點:
建構函式(方法)名和類名相同。
在建立一個對象執行個體時,系統會自動的調用該類的構造方法完成對新對象的初始化。
建構函式基本用法:
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>
構造方法(函數)小結
構造方法名和類名相同
主要作用是完成對新對象執行個體的初始化
在建立對象執行個體時,系統自動調用該對象的構造方法
類定義的完善:
在介紹了建構函式(方法)後,我們類(原型對象)的定義就可以完善一步:
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面向(基於)對象編程--構造方法(函數)