函数
函数的作用:功能代码块的封装,减少重复代码、代码冗余。
注:js代码生命区和执行区在一起。
声明方式
因为js是弱类型语言,所以在函数的声明中,参数的类型可以不写。
声明方式1:
function test1(a1,a2){
alert("test01");
}
test1(1,1);//调用
声明方式2:
var test2 = new Function("a1","a2","alert('test02');");//前面的参数是声明函数的参数(任意多个),最后一个参数是声明函数的函数体
test2(1,1);//调用
声明方式3:
var test3 = function(a1,a2){
alert("我是声明方式3");
}
test3("a1","a2");//调用
== 上述声明方式只是在用法上有区别,底层实现原理都一样==
形参学习
function test1(a1,a2){
alert("test01");
}
test1();
test1(1);
test1(1,1);//调用
test1(1,1,1);
调用函数时,参数可以传任意个,按顺序给函数传值。如果传的比需要的少,那么后面的参数为undefined,如果传的比需要的多,那么多传的没有参数接收,无法使用。
返回值
var test4 = function(a1){
alert("函数返回值");
return 1;
}
alert(test4(1));/* 没有返回值还打印会报错 */
return 返回值;
输出的函数如果没有返回值会报错。
函数执行符
函数的执行符是“()”,有小括号的时候执行函数,没有则是一个变量。
function test1(a1,a2){
return "返回值";
}
alert(test1);//输出test1的值
alert(test1("a1","a2"));//执行test1()并输出返回值
alert(test1); –
alert(test1(“a1”,“a2”)); –
开发中常用样式
匿名函数
function test2(fu){//函数参数是另一个函数
fu();
}
//匿名函数做另一个函数的参数
test2(function(){
alert("开发");
});
类学习
类的声明
类的声明只用一种形式:
function Person(name,age){
/* 类中定义的变量是对象的公共部分,每个对象可以扩充 */
this.name = name;//不用声明,自动声明
this.age = age;
this.id;
this.test = function(a){
alert(a);
}//两个对象的方法不是同一个 p1.test === p2.test false
}
js类的声明类似构造器声明,this.变量名指代类中的变量,用类名后面的参数赋值,或者自己赋值,或者不复制,定义函数与变量相同。类中的变量都不用声明,js会自动声明。
在类中定义的变量都是对象公有的部分(原型空间),即之后新建的每一个对象都有这些属性函数。可以在声明一个对象之后给对象添加一个变量、函数。如下:
var p1 = new Person("张三",20);
var p2 = new Person("李四",20);
p1.address = "山东省";//Person类里面没有adress变量,但是可以自己定义,这里p1有adress变量,而p2没有adress变量
类的使用
声明一个对象:
var p1 = new Person("张三",20);//js中所有变量(对象也是变量)都用var关键字
使用对象的变量:
alert(p1.name);
prototype:
类中有函数,每声明一个对象,都会占用一块内存给函数,但是同一个类的不同对象的函数功能都是一样的,如果让同一个类的不同对象使用的函数(在内存中的)都是同一个,那样会大大节省内存空间,使用prototype可以实现这样的需求。
function User(name,id){
this.name = name;
this.id = id;
this.test1 = function(){
alert("内部函数");
}
}
User.prototype.test2 = function(){//要想使用prototype只能在外面定义
alert("外部函数");
}
var u1 = new User("张三",21);
var u2 = new User("李四",21);
alert(u1.test1 === u2.test1); //false
alert(u1.test2 === u2.test2); //true
类的“继承”
js没有继承,但可以在一个类(子类)中定义另一个类(父类)的变量实现相同效果。
function Person(name,age){
this.name = name;
this.age = age;
this.id;
this.test = function(a){
alert(a);
}
}
function User(name,id){
this.name = name;
this.id = id;
}
User.prototype.test = function(){
alert("我是user");
}
Person.prototype.user = new User();
p1.user.test();
自定义对象
因为js的类可以进行扩充,同时在开发中很多时候并不知道传过来的数据是什么类,所以要使用自定义对象,动态存储数据。
创建自定义对象:
/* 第一种方法 */
var obj1 = new Object(); //可以认为对象里面什么都没有
obj1.name = "王二狗";
obj1.id = "2969";
obj1.test = function(){/* 一般用来存储数据,不会在自定义对象中写函数 */
alert("我是王二狗");
}
/* 第二种方法 */
var obj2 = {};
obj2.name = "大伟哥";
作用:
很多时候我们没有办法预先知道一个对象应该有哪些属性,所以只能使用自定义对象来存储数据,保证数据的完整性,常在Ajax中使用。