jsp函数的使用
在这篇博客里面谈一谈jsp函数的一些使用规则
1.在jsp里面,函数和类是等价的,因为在函数的内部可以定义函数和变量。定义在函数内的函数和变量分为实例属性、实例函数、类属性、类函数。实例和类是面向对象的概念
实例属性是属于单个对象的,所以必须通过实例对象来访问。类属性是属于整个类的(也就是整个函数的),因此必须通过类(函数来访问)。如果用实例对象的名字来访问类属性,那么将返回undefined,因为这样就相当于为对象实例新增了一个和函数实例同名的属性。虽然对象实例不能访问类属性,但是可以通过在定义对象的时候修改类属性的值。
//类属性和实例属性的使用
function Person(national,age)
{
this.age = age;
Person.national = national;
var local_var;//
} //创建第一个实例对象
var first = new Person('中国',19);
with(document)
{
writeln("第一个对象的属性:"+"<br>");
writeln("用对象名来调用属性:"+first.age +" "+first.national+" "+first.local_var+"<br>");
writeln("用类名来调用属性:"+Person.age+" "+Person.national+" "+Person.local_var+"<br>");
} //创建第二个实例对象
var second = new Person('美国',20);
with(document)
{
writeln("第二个对象的属性:"+"<br>");
writeln("用对象名来调用属性:"+second.age +" "+second.national+" "+second.local_var+"<br>");
writeln("用类名来调用属性:"+Person.age+" "+Person.national+" "+Person.local_var+"<br>");
} //创建第三个实例变量
var third = new Person('韩国',21);
with(document)
{
writeln("再次调用类属性:"+Person.national+"<br>");
}
2.jsp函数的独立性
虽然jsp中的函数是属于某个对象的,但是并不是只有函数所属类的对象才能调用该函数,其他对象也能调用该函数。调用函数需要使用call()或者apply()方法。调用的语法为:函数名.call(调用对象,参数1,参数2...)。call()和apply()的不同点在于call()需要把函数的所有参数一个一个的列出来,而apply()方法需要把函数的参数以数组的形式列出来。
function test(name)
{
this.name = name;
//定义匿名函数的时候一定要在最后加;
this.inf = function(a,b)
{
document.writeln("我的name是"+a+b);
};
};
var p = new test();
var name = "hello";
p.inf.call(window,"date","ketty"+"<br>");
p.inf.apply(window,["web","ok"+"<br>"]);//想要在apply()方法里面换行,必须把换行符写到数组里面

3.jsp函数参数的传递和鸭子理论
jsp是一种弱类型的语言,函数参数的传递没有严格的要求。调用函数的时候,实参的个数可以少于形参的个数,未传入实际值的参数系统会为其赋值为undefined。
因此,在函数的定义中最好有对参数类型的检测处理,防止程序出现异常的错误。这就是鸭子理论。判断参数类型的时候,我们通常要用到typeof()和instance()这两个函数。typeof用以获取一个变量或者表达式的类型,typeof一般只能返回如下几个结果:
number,boolean,string,function(函数),object(NULL,数组,对象),undefined。
很明显,typeof()有很强的局限性。当要具体的判断某个对象是否为某个类的实例变量的时候,就要用到instance()方法了。
//函数参数类型的判断函数对参数进行逻辑操作之前必须先对参数类型进行判断鸭子理论
function changeAge(person)
{
if(typeof person == 'object' && typeof person.age=='number')
{
document.write("函数执行前的age:"+person.age+"<br>");
person.age=10;
document.write("函数执行中的age:"+person.age+"<br>");
}
else
{
document.write("参数类型不符合"+typeof person+"<br>");
}
}
//采用不同的方式调用changeAge()函数
changeAge();
changeAge('xxx');
changeAge(true);
p0={abc:34};
changeAge(p0);
p={age:25};
changeAge(p);

4.函数的protype属性
函数的使用规则/call/apply/函数的独立性/函数参数的传递/函数的重载/鸭子理论/prototype方法动态增加方法和属性
jsp函数的使用的更多相关文章
- 将请求挂载至WEB页面
有两种方式 1.使用标准的方式,在某个菜单下面直接加入标准功能 提交请求(FEM_FWK_SUBMIT_REQ),然后即可在页面上提交请求. 2.将指定请求定义成功能,在WEB页面使用功能直接提交指 ...
- project1
知识漏洞 有空就默写一下-.- [概念] 要好好理解并且背下来记住 MVC要分开,Servlet里面不处理计算的逻辑,只有调用函数(是不是变量传进来以后,调用都不能有呢?) clear map不能直 ...
- JavaWeb高级编程(下篇)
Java标准标签库 JSP标签语法中包含一些简写可以帮助轻松编写JSP.这些简写中第一个就是taglib指令. <%@ taglib prefix="c" uri=" ...
- jsp中出现onclick函数提示Cannot return from outside a function or method
在使用Myeclipse10部署完项目后,原先不出错的项目,会有红色的叉叉,JSP页面会提示onclick函数错误 Cannot return from outside a function or m ...
- 关于JSP中<body onload="fun()">body标签中onload中函数不执行问题
问题描述: 在一个页面中,我们经常会初始化一下数据,而且会在指定的DOM元素初始化数据,这时候我们就会使用<body onload="fun()">来加载我们的数据.o ...
- JSP页面JSTL提供的函数标签EL表达式操作字符串的方法
首先在jsp页面导入标签<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions&quo ...
- 重温JSP学习笔记--El函数库
EL函数库(由JSTL提供的) * 导入标签库:<%@ tablib prefix="fn" uri="http://java.sun.com/jsp/jstl/f ...
- 11 JSP/EL表达式/EL函数
JSP * 概述: JSP(Java Server Pages)与Java Servlet一样,是在服务器端执行的不同的是先由服务器编译部署成Servlet执行 * JSP的运行原 ...
- 自定义JSP中的Taglib标签之四自定义标签中的Function函数
转自http://www.cnblogs.com/edwardlauxh/archive/2010/05/19/1918589.html 之前例子已经写好了,由于时间关系一直没有发布,这次带来的是关于 ...
随机推荐
- [0] Visual studio 2010 快捷键大全
[窗口快捷键]Ctrl+W,W: 浏览器窗口 Ctrl+W,S: 解决方案管理器 Ctrl+W,C: 类视图 Ctrl+W,E: 错误列表 Ctrl+W,O: 输出视图 trl+W,P: 属性窗口 C ...
- ViewPager实现无限轮播踩坑记
最近笔者想通过ViewPager来实现一个广告Banner,并实现无限轮播的效果,但是在这个过程中踩了不少的坑,听我慢慢道来.如果大家有遇到和我一样的情况,可以参考我的解决方法,没有那就更好,如果针对 ...
- fdisk 非交互式创建 分区
一. key 非交互式创建分区, 与 交互式创建分区区别不大. 使用 fdisk 的默认选项, 使用空行即可, 不用回车. 创建 主分区 和 扩展分区时, 需要注意 分区号 二. 创建主分区 fdis ...
- Codeforces Round #419 (Div. 2)
1.题目A:Karen and Morning 题意: 给出hh:mm格式的时间,问至少经过多少分钟后,该时刻为回文字符串? 思路: 简单模拟,从当前时刻开始,如果hh的回文rh等于mm则停止累计.否 ...
- golang 私钥"加密"公钥"解密"
---恢复内容开始--- 之前工作主要使用C/C++与银行/第三方支付对接,但C/C++无法满足客户"当天给协议明天实盘上载"的开发速度以及现公司一些特殊情况,所以决定用go来 ...
- spingMVC aop不生效的解决方式
从网上搜索了一些资料,参考了下面的这个解决方案 http://blog.csdn.net/mmm333zzz/article/details/16858209
- vue-cli 脚手架 安装
一. node安装 1)如果不确定自己是否安装了node,可以在命令行工具内执行: node -v (检查一下 版本): 2)如果 执行结果显示: xx 不是内部命令,说明你还没有安装node , ...
- mongo中的分页查询
/** * @param $uid * @param $app_id * @param $start_time * @param $end_time * @param $start_page * @p ...
- [leetcode-617-Merge Two Binary Trees]
Given two binary trees and imagine that when you put one of them to cover the other, some nodes of t ...
- 6.vue如何上传到svn
node_module是不需要上传的,先删掉,然后用tortoiseSvn的TortoiseSVN Repository Browser,ADD folder,选择工程文件,就行,checkout下来 ...