建構函式的三種變數剖析

建構函式的三種變數剖析:

Jvascript與一般的物件導向語言不同,它不是使用類別來建立物件,而是使用建構函式,在Javascript中建構函式可以像類別一樣,用來重複建立物件。不過與類別又不相同。建構函式本身就是物件,所以可以擁有自己的屬性和方法,同時它也是個函式,有自己的作用域變數,而建構函式建立的物件也擁有自己的屬性與方法。我們直接來看看下面這例子:

<script type="text/javascript">
function myconstructor(name,age){
var myage=age;
this.myname = name.toString();
/*
this.getAge=function(){
 return myage;
}
*/
}
myconstructor.type="human";
var x= new myconstructor("維克", 15);
alert(x.myname);
alert(myconstructor.type);
</script>

這例子中,myage是myconstructor的函式作用域中的私有變數,通常在呼叫完後會被回收掉,不過可以藉由閉包(this.getAge)來封裝成建構子所建立的物件的私有屬性。myname 是建構函式所建立的物件的公開屬性。type則是myconstructor物件(建構函式)的公開屬性,通常與建構函式建立的物件無關。除了一個特別的屬性--prototype。建構函式的prototyp屬性影響了其所建立物件的繼承關係。不過建構函式雖然與其建立的物件是不同物件,但是建構函式的公開屬性跟方法其實可以很直觀的被視為物件的靜態屬性與方法。靜態屬性與方法可以不被實體化就使用,就像是一般物件導向語言的類別所使用的靜態方法與屬性一樣。在Javascript中,Math物件就是個非典型的例子。Math物件不需要被實體化(也就是說不需要有new Math()這東西),而能被直接使用,因為Math物件的屬性跟方法都是屬於靜態的。說非典型是因為,Math物件其實本身不是建構函式,我只是拿它來解釋這概念。

 
 

  按個讚!~支持本站!~

FB推薦載入中