arguments
1、javascript中,每个函数都包含一个arguments属性
2、arguments属性是一个数组
3、在函数调用时,将实参出入到函数的arguments中,再由arguments将数据传递给形参
4、arguments属性存在,可将javascript中函数在调用时传递实参与形参进行格式,增加函数调用灵活性
5、arguments属性只能在函数体内使用
function类型对象
介绍
1、function是javascript中一种高级数据类型<br>2、一个function类型对象用于管理一个具体函数<br>3、javascript中function类型相当于java中method类型
声明方式
1、标签声明方式
function 函数对象名(参数1,参数2){<br> 命令;<br>}
对象创建时机
浏览器在加载script是,共加载两次<br>第一次加载,将script标签所有以标准形式声明函数对象进行创建<br>第二次加载,将script标签所有命令行按照自上而下顺序来执行
2、匿名声明方式
var 函数对象名 = function (参数1,参数2){命令1,命令2,...}
变量
局部变量
1、定义:在函数执行体内,通过var修饰声明的变量<br>function fun1(){<br> var name="mike"; //局部变量<br>}
2、特征:只能在当前函数执行体内使用,不能在函数执行体外使用
全局变量
1、定义:可在当前html中所有函数中使用
2、全局变量被声明时,自动分配给window对象作为其属性<br>var name="mike"等同于var window.name="mike"
object类型对象特征
1、定义:在JavaScript认为所有通过【构造函数】生成的对象其数据类型都是object类型
2、特征:object类型对象在创建完毕后,可以根据实际情况,任意添加属性和方法,也可以移除属性和方法
3、属性维护
第一种维护方案:<br>添加属性:object对象.新属性名=值;<br>添加函数:object对象.新函数对象名=function(){};
第二种维护方案:<br>添加属性:object对象["新属性名"]=值;<br>添加函数:object对象["新函数对象名"]=function(){};
自定义构造函数
1、命令:function 函数对象名(){<br><br>}
2、调用:var object类型对象=new 函数对象名();
3、普通函数和构造函数区分:<br>1)函数没有调用之前,无法区分函数身份,只能根据函数调用形式区分<br>2)判断普通函数:var num = 函数对象名<br>3)判断构造函数:var num = new 函数对象名();<br>4)返回值:普通函数运行后需要通过return将执行结果返回<br> 构造函数运行后,直接返回一个object类型对象,此时函数return相当于无效
this指向
java中指向:<br>public Student(){<br> this.name="mike"; //由构造方法生成的实例对象<br>}<br>public void sayHello(){<br> //this,调用sayHello方法的实例对象<br>}
javascript中this指向与Java中this指向完全一致
在构造函数中,this指向当前函数生成object类型对象
在普通函数中,this指向调用当前函数的实例对象
JSON
1、前提:JavaScript中得到object类型对象方式<br>
方式一:有构造函数生成的对象都是object类型对象
方式二:由JSON数据描述格式生成对象都是object类型对象
2、JSON数据描述格式:JavaScript中获得object类新对象简化版
3、标准命令格式:var obj={"属性名1":值,"属性名2":值};<br>开发人员习惯于将由JSON生成object类型对象称为【JSON对象】
4、JSON数组:专门存放JSON对象的数组
5、JSON实现服务端与JavaScript间数据通信<br>Servlet服务端:<br> //Student stu=new Student(10,"zhangsan"); //高级对象,前端不能直接解析stu,可通过下方反射机制转换<br> String str="{\"sid\":10,\"sname\":\"mike\"}";<br> //将学员对象存入request请求作用域对象<br> request.setAttribute("key",str);<br> //请求转发,向tomcat申请调用index_1.jsp,并将request和response通过tomcat交给index_1.jsp<br> request.getRequestDispatcher("/index_1.jsp").forward(request,response);<br>前端:<br> <script><br> var stuObj=${requestScope.key}; //从request作用域对象得到服务端提供的学生对象<br> alert("学生编号"+stuObj.sid+"学生姓名"+stuObj.sname)<br> </script>
6、通过反射机制将Java高级对象内容转换为JSON格式<br><br>
工具类:<br>public class ReflectUtil {<br> //作用:将任意类型对象内容转换为JSON格式字符串返回<br> //参数:一个高级引用类型对象Student对象,Dept对象。。。<br> public static String jsonObject(Object obj) {<br> Class<?> classFile = null;<br> Field fieldArray[] = null;<br> StringBuffer str = new StringBuffer("{");<br> //1、获得当前对象隶属的【class文件】<br> classFile = obj.getClass(); //Student.class<br> //2、获得【class文件】所有属性<br> fieldArray = classFile.getDeclaredFields();<br> //3、获得当前对象所有属性的值<br> try {<br> for (int i = 0; i < fieldArray.length; i++) {<br> Field field = fieldArray[i];<br> field.setAccessible(true); //私有访问权限属性能在class文件外部使用<br> String fieldName = field.getName(); //获得属性名称<br> Object value = field.get(obj);<br> //4、将获得属性及其值拼接为JSON格式字符串<br> str.append("\"");<br> str.append(fieldName);<br> str.append("\":");<br> str.append("\"");<br> str.append(value);<br> str.append("\""); //{"sid":"10","sname":"zs"}<br> if (i < fieldArray.length - 1) {<br> str.append(",");<br> }<br> }<br> } catch (IllegalAccessException e) {<br> e.printStackTrace();<br> } finally {<br> str.append("}");<br> }<br> return str.toString();<br> }<br>}<br>}<br>
json工具包,不需要自己封装:<br>