例子:

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) 表示将结果分页