js学习(三)--同样灵活的函数、类

函数

函数的作用:功能代码块的封装,减少重复代码、代码冗余。
注: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中使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值