在这篇博客里面谈一谈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函数的使用的更多相关文章

  1. 将请求挂载至WEB页面

    有两种方式 1.使用标准的方式,在某个菜单下面直接加入标准功能  提交请求(FEM_FWK_SUBMIT_REQ),然后即可在页面上提交请求. 2.将指定请求定义成功能,在WEB页面使用功能直接提交指 ...

  2. project1

    知识漏洞  有空就默写一下-.- [概念] 要好好理解并且背下来记住 MVC要分开,Servlet里面不处理计算的逻辑,只有调用函数(是不是变量传进来以后,调用都不能有呢?) clear map不能直 ...

  3. JavaWeb高级编程(下篇)

    Java标准标签库 JSP标签语法中包含一些简写可以帮助轻松编写JSP.这些简写中第一个就是taglib指令. <%@ taglib prefix="c" uri=" ...

  4. jsp中出现onclick函数提示Cannot return from outside a function or method

    在使用Myeclipse10部署完项目后,原先不出错的项目,会有红色的叉叉,JSP页面会提示onclick函数错误 Cannot return from outside a function or m ...

  5. 关于JSP中<body onload="fun()">body标签中onload中函数不执行问题

    问题描述: 在一个页面中,我们经常会初始化一下数据,而且会在指定的DOM元素初始化数据,这时候我们就会使用<body onload="fun()">来加载我们的数据.o ...

  6. JSP页面JSTL提供的函数标签EL表达式操作字符串的方法

    首先在jsp页面导入标签<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions&quo ...

  7. 重温JSP学习笔记--El函数库

    EL函数库(由JSTL提供的) * 导入标签库:<%@ tablib prefix="fn" uri="http://java.sun.com/jsp/jstl/f ...

  8. 11 JSP/EL表达式/EL函数

    JSP      * 概述: JSP(Java Server Pages)与Java Servlet一样,是在服务器端执行的不同的是先由服务器编译部署成Servlet执行      * JSP的运行原 ...

  9. 自定义JSP中的Taglib标签之四自定义标签中的Function函数

    转自http://www.cnblogs.com/edwardlauxh/archive/2010/05/19/1918589.html 之前例子已经写好了,由于时间关系一直没有发布,这次带来的是关于 ...

随机推荐

  1. javamail 邮件格式再优化(由详情——>改为统计)

    前言:之前扩展的ant-jmeter支持邮件附件形式上传以及邮件内容的html文件格式. 如图: 由于邮件的内容格式是详情信息,也就是说直观的显示的是case,但由于case的增加,邮件内容越来越大! ...

  2. guoshiyv 数据结构与算法2-1 线性链式存储

    线性链式存储:   包含两部分:1.存储的单个元素 2.指针,指向下一个的地址 typedef struct() { ElementType Data; struct Node *Next; }Lis ...

  3. 虚拟桌面 VDI

    什么是VDI(Virtual Desktop Infrastructure): 通过对于本企业的服务器进行整合,使用VMware进行虚拟机部署,利用服务器资源,实现由一个物理机实现多个虚拟机,解决资源 ...

  4. App测试札记

    App测试札记 测试应该收集信息 测试应该问问题 测试应该扮演不同角色 测试应该如实反馈 初学者 有哪些可以利用的信息?需求,技术方案,测试设计,现有功能,相关人员 App会在哪些环境下运行 App会 ...

  5. PostgreSQL数据库web维护客户端工具软件

    TreeSoft数据库管理系统使用JAVA开发,采用稳定通用的springMVC +JDBC架构,实现基于WEB方式对 MySQL,Oracle,PostgreSQL 等数据库进行维护管理操作. 功能 ...

  6. mysql left join

    MySQL左连接不同于简单连接.MySQL LEFT JOIN提供该表额外字段在左侧. 如果使用LEFT JOIN,得到的所有记录的匹配方式相同, 在左边表中得到的每个记录不匹配也会有一个额外的记录. ...

  7. 【Android Developers Training】 100. 使用Intent修改联系人数据

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  8. Example003通过按钮创建窗口

    <!--实例003通过按钮创建窗口--> <head> <meta charset="UTF-8"> </head> <for ...

  9. Android开发随手记

    本文是作者在Android开发实践中的随手速记,记录一些小问题的解决方案和注意事项,持续更新. 以下是速记内容,若有不严谨的地方,望小伙伴们指出. 1.Module 不生成R文件,可尝试取消对该Mod ...

  10. Java post提交表单限制

    According to Tomcat7's documentation, setting maxPostSize in Connector to a value less than or equal ...