关于函数
- 在同一个js文件中,如果有两个相同的函数,则下面的函数起作用
- 函数参数:对同一个函数,即使不显示的声明其参数,在使用该函数时既可以使用带参数的函数形式,也可以使用不带参数的函数形式
通过使用arguments[0]就可以访问函数的第一个参数,其他依次类推
用arguments对象判断传递给函数的参数个数,即可模拟函数重载
函数名.length可以用来获取该函数的参数个数 - 函数定义方式:
3.1. 正常的定义
function functionName([arguments]){
Javascript statements
[return expression]
}
3.2. 匿名函数
var func2 = function(…){…};
3.3. 匿名函数加默认参数
var iii = (function(a,b){return a+b;})(1,2);// 后面的括号(1,2)表示创建完后立即进行这个函数调用
关于类
JavaScript中的对象系统是基于原型的,这也意味着它与普通的面向对象语言,比如Java和C++不一样。基于原型意味着,建立新类的时候,是新 建一个包含指定的属性和方法的构造函数,而并不是不是新建立一个类类型。this关键字用于指代那个类生成的实例。可以这样理解this对象,它本质上就 是一个包含成员入口的属性列表。
类的定义方式:
- 通过构造函数来模拟类
var Person=function(name){//这是一个构造函数
this.name=name;//成员变量,使用this标明是共有变量,如果是var name就是私有变量
}
因为函数有多种写法,所以上面还可以写成:function Person(name)
Person.prototype.say=function(){//成员函数的定义
alert('hi,我是'+this.name);
}
var wanz=new Person('丸子');//实例化对象
wanz.say();//类的实例访问成员函数,输出:hi,我是丸子
var rekey=new Person('rekey,丸子的师傅');//另一个实例
rekey.say();//hi,我是rekey,丸子的师傅 - 类的静态属性和方法
var Person=function(name){
this.name=name;
}
Person.prototype.say=function(){
alert('hi,我是'+this.name);
}
Person.color='yellow';//静态属性的添加如此简单
alert(Person.color);
var wanz=new Person('丸子');
wanz.say();
alert(wanz.color);//undefined,静态属性color并不会被实例继承
类中静态属性和方法的定义 (http://blog.youkuaiyun.com/sevenzhang/archive/2007/03/16/1531518.aspx )目前被认可的有两种方法:(同样用上例作说明)
1.采用上述A.value定义静态属性,采用A.func定义静态方法
2.采用上述A.prototype.value定义静态属性,采用A.prototype.func定义静态方法
在一些文献中,
称A.value定义的属性为static class variables
称A.func定义的方法为static class functions
称A.prototype.value定义的属性为shared member variables
称A.prototype.value定义的方法为shared member functions采用方法1和2在一般情况下是一样的,但是还是有一定的差别,举例说明如下:
(1).类A的实例x并没有属性value2和方法func2,也就是说x.value2和x.func2都不存在,只存在A.value2和A.func2
(2). x.value3改变的时候 A.prototype.value3不改变,但是 A.prototype.value3改变的时候 x.value3将随之改变
Note:this与prototype定义的命名冲突的情况
事实上,编译器尝试先搜索this定义的属性或者方法,当找不到的时候才在prototype中进行寻找。