函數與類


例子:

import console;

student = class {
	ctor( name,score,sex ){
	
	};//構造函數,定義實例的屬性有三個
	name = name;
	score = tonumber(score);
	sex = sex;
	//根據成績生成等級
	get_grade = function(score){
		if(score > 90 ){
			..console.log("CLASS A")
		}
		elseif(score > 80 and score < 90){
			..console.log("CLASS B")
		}
		elseif(score >60 and score < 80){
			..console.log("CLASS C")
		}
		else {
			..console.log("CLASS D")
		}	
	};
	//輸出信息
	get_info = function(){
		..console.log("姓名:",this.name,"性別:",this.sex,"成績:",this.score,owner.get_grade(this.score))
	};
}


var STU = student("Bob",57,"male") //構造一個實例
STU.get_info()

console.pause();


1.function是一個模子,可以刻出結果。

2.function中的參數,就是函數自動定義的局部變量,來接收調用者傳來的值。調用函數時,傳的參數是一一對應的。而且,既然是變量,可以在函數內對參數做改變。如果func中有默認參數,則在調用時不給的話,就有默認賦值,如果給了的話,就被忽略。

如func(a,b){

a=a+1

b=b+1

}

3.在定義一個函數的時候,是先編譯成函數體,在調用且有傳入的變量時,才執行。

4.給function傳入的參數可以是變量,但具體傳進的是這個變量必須要有值,如果這個變量的值爲null,則報錯。

5.function的輸出只有唯一的出口,就是return,一個function的的調用可以做爲表達式,賦值給一個變量。即var x = function(...){ pass }的樣子。

6.表中可以放function。在一個表內部的func要被調用的話,需使用var c= tab.funcname();的模式。在這個表內,如果這個func要調用此表的裏面的成員,需要使用owner參數。owner代表擁有該成員函數的當前對象。執行方式爲“對象.成員函數(參數)”。函數名前面的對象即成員函數的owner對象。當我們在調用這個函數的時候,編譯器就會把這個func前面的名字傳遞給owner,就代表了這個表名。【目前看,只有在“一個表裏有一個function”的時候,在表中調用function的時候,要用到owner,owner是調用函數時,函數名字前面的集合對象。】

一般來說,這種方式可以做成匿名函數。即先把func賦值給一個變量。在return中使用owner方式,然後在其他表中調用這個變量的時候,可以變成按 具體情況來指向具體的命名空間。不過表中不能使用下標的方式來取,一定要用點的方式,否則owner不會默認傳遞 。

例子:

import console;

var tab = {
    a = 1;
    b = 2;
    add = function(){
        return owner.a + owner.b;
    }
 }
 var c = tab.add(2,3)
 console.log(c)
 console.pause()

如果給func傳入一個表,則傳入的是表的內存地址,而不是表的值,所以外面的表的值改變了,傳入的值會改變。從這裏來看,owner所指向的對象,是隨着變化的。而this則永遠指向class裏的屬性。

編譯器對函數,是從上向下先編譯,先求出所有調用參數的值,最後在再調用的時候,在給出函數的結果。

7.類

類可以用來構造一個函數。用來接收構造函數,也是一個局部變量,但生效範圍是整個類內部。定義的模式與表一樣,所有的成員也要用分號隔開。類中默認定義了一個this的變量。在類內部,可以使用this對象引用動態創建的對象(【this就是對class生成的實例的代指,在class中會定義實例的固有屬性和他的行爲,在定義行爲時,會用到他的屬性,就用this.屬性的方式】)。類就是一個表對象,其中包含了要生成的實例的固有屬性和他的行爲。


8.構造函數用來在創建對象時,初始化對象。即對對象成員變量賦初始值。使用ctor關鍵字定義構造函數,構造函數在調用類創建對象時被調用。構造函數可以接收參數,並返回對象。定義構造函數除了用ctor關鍵字代替function關鍵字以外,與定義函數的語法一致,但構造函數必須是類的第一個成員。


import console;

clsTab = class {
	ctor( a,b){}
	a=a;
	b=b;
	add = function(){
		return  this.a + this.b; 
	}
	
	type=me;
	/*對象的所有成員必須用分號分隔*/
}

var tab1 = clsTab(2,3)
console.log(tab1.add())
console.pause()


與函數相比,一個類還可以做一個namespace來用。因爲他會產生自己的靜態的,全局的,名字空間,所以,在類中使用外部的功能時,要用global或者..參數。

9.類的靜態變量 :類名字空間成員變量,類創建的所有對象實例所共享。簡單說,這個類創建的不同的實例,指向的是同一個內存地址,這時候叫類的靜態變量

。靜態成員可以直接用名字空間的方式直接訪問。

10.類的動態變量:

對象實例的成員:動態創建,動態存儲,類創建的不同 實例之間不共享。


11.console.dump與console.more(1)

    console.dump用來顯示變量的值,支持table、string、number,不支持函數。

    console.more(1) 表示將結果分頁


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章