- 浏览: 697058 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (272)
- Struts1.x (7)
- 事务 (2)
- Hibernate (11)
- 数据库 (14)
- JavaScript&Ajax (43)
- JSP&Servlet (2)
- Flex (1)
- 其它 (9)
- Java (22)
- 框架集成 (1)
- WebService (3)
- Tomcat (3)
- 加密和安全登录 (13)
- 基于原型的JavaScript (0)
- JavaDoc和Java编码规范 (3)
- CAS (1)
- 加密 (1)
- Axis2 (10)
- Ext2.x (3)
- SSH整合 (2)
- Ext (0)
- 正则表达式 (1)
- 设计模式 (4)
- 对象序列化技术 (3)
- CVS (2)
- Struts2 (6)
- Spring 2.x (7)
- Spring Security (2)
- Java 课程 (20)
- 程序员之死 (1)
- 软件测试 (6)
- UML (5)
- NetBeans (1)
- cxf (1)
- JMS (13)
- 设计 (5)
- ibatis2.x (3)
- Oracle (1)
- WebSphere (7)
- 概要设计 (1)
- DB2 (10)
- PowerDesigner (0)
- 软件工程 (5)
- rose (1)
- EA (1)
- LDAP (7)
- Portal&Portlet (3)
- MQ (10)
- ESB (4)
- EJB (2)
- JBoss (2)
最新评论
-
typeRos:
只有配置文件,没有代码么大神
Spring实现IBMMQ的JMS消息发布/订阅模式 -
panamera:
如果ActiveMQ服务器没有启动,这个时候消息生产者使用Jm ...
Spring JMSTemplate 与 JMS 原生API比较 -
lian819:
顶1楼, 引用文件, 配置属性, 太方便了
EXTJS 同步和异步请求 -
wilhard:
说得清楚明白
<%@ include file=""%>与<jsp:include page=""/>区别 -
刘琛颖:
总结的很好。受益了
javascript 父窗口(父页面)— 子窗口 (子页面)互相调用的方法
JavaScript 函数是最棒的
在很多编程语言中,函数和对象通常被视为两样不同的东西。在 JavaScript 中,其差别很模糊 — JavaScript 函数实际上是具有与它关联的可执行代码的对象。请如此看待普通函数:
function func(x) { alert(x); } func(“blah”);
这就是通常在 JavaScript 中定义函数的方法。但是,还可以按以下方法定义该函数,您在此创建匿名函数对象,并将它赋给变量 func
var func = function(x) { alert(x); }; func(“blah2”);
甚至也可以象下面这样,使用Function构造函数:
var func = new Function(“x”, “alert(x);”); func(“blah3”);
Function的第一个参数是函数的入参,第二个参数是函数的主体部分,如果有多个输入参数的写法如下:
//方法1 var obj = new Object(); obj.test = "obj的Test"; var func = new Function ( ["x","y","z"], "alert(x);alert(y);alert(z.test);" ); func("blah1","blah2",obj);
// 方法2 var obj = new Object(); obj.test = "obj的Test"; var func = new Function ( "x,y,z", "alert(x);alert(y);alert(z.test);" ); func("blah1","blah2",obj);
// 方法3 var obj = new Object(); obj.test = "obj的Test"; var func = new Function ( "x","y",z", "alert(x);alert(y);alert(z.test);" ); func("blah1","blah2",obj);
以上三种方法都可以实现定义多个入参的函数。并且演示了如何定义一个入参是对象的函数的定义。
关于Function的小结,如下面代码中的注释:
/* * Function可以有多个入口参数,最后一个参数最为方法体。 */ var MyObject = new Function("msg","alert(msg);"); var o = new MyObject("Hello world!");
此示例表明函数实际上只是支持函数调用操作的对象。最后一个使用Function 构造函数来定义函数的方法并不常用,但它展示的可能性非常有趣,因为您可能注意到,该函数的主体正是Function构造函数的String参数。这意味着,您可以在运行时构造任意函数。
为了进一步演示函数是对象,您可以像对其他任何JavaScript对象一样,在函数中设置或添加属性:
function sayHi(x) { alert(“Hi, “ + x + “!”); } sayHi.text = “Hello World!”; sayHi[“text2”] = “Hello World... again.”; alert(sayHi[“text”]); // displays “Hello World!”
作为对象,函数还可以赋给变量、作为其它函数的值返回,并可以作为对象的属性或数组元素进行存储等等。图1提供了这样一个示例。
Figure 1 JavaScript中的函数是最棒的
// assign an anonymous function to a variable var greet = function(x) { alert(“Hello, “ + x); }; greet(“MSDN readers”); // passing a function as an argument to another function square(x) { return x * x; } function operateOn(num, func) { return func(num); } // displays 256 alert(operateOn(16, square)); // functions as return values function makeIncrementer() { return function(x) { return x + 1; }; } var inc = makeIncrementer(); // displays 8 alert(inc(7)); // functions stored as array elements var arr = []; arr[0] = function(x) { return x * x; }; arr[1] = arr[0](2); arr[2] = arr[0](arr[1]); arr[3] = arr[0](arr[2]); // displays 256 alert(arr[3]); // functions as object properties var obj = { “toString” : function() { return “This is an object.”; } }; // calls obj.toString() alert(obj);
记住这一点后,向对象添加方法将是很容易的事情:只需要选择名称,然后将函数赋值给该名称。因此,我通过将匿名函数分别赋值给相应的方法名称,在对象中定义了三个方法:
var myDog = { “name” : “Spot”, “bark” : function() { alert(“Woof!”); }, “displayFullName” : function() { alert(this.name + “ The Alpha Dog”); }, “chaseMrPostman” : function() { // implementation beyond the scope of this article } }; myDog.displayFullName(); myDog.bark(); // Woof!
注意myDog.displayFullName(); myDog.bark();调用方法时要加上括号,因为虽然是将方法赋给了对象的属性,但他们还是方法阿。
C++/C# 开发人员应当很熟悉displayFullName 函数中使用的“this”关键字 — 它引用一个对象,通过对象调用方法(使用Visual Basic的开发人员也应当很熟悉它, 它在Visual Basic中叫做“Me”)。因此在上面的示例中,displayFullName中的"this"的值是myDog对象。但是,"this" 的值不是静态的。通过不同对象调用 “this” 时, 它的值也会更改以便指向相应的对象,如图2所示:
Figure2 "this" 随对象更改而更改
function displayQuote() {
// the value of “this” will change; depends on
// which object it is called through
alert(this.memorableQuote);
}
var williamShakespeare = {
'memorableQuote': 'It is a wise father that knows his own child.',
'sayIt' : displayQuote
};
var markTwain = {
'memorableQuote': 'Golf is a good walk spoiled.',
'sayIt' : displayQuote
};
var oscarWilde = {
'memorableQuote': 'True friends stab you in the front.'
// we can call the function displayQuote
// as a method of oscarWilde without assigning it
// as oscarWilde’s method.
//”sayIt” : displayQuote
};
williamShakespeare.sayIt(); // true, true
markTwain.sayIt(); // he didn’t know where to play golf
// watch this, each function has a method call()
// that allows the function to be called as a
// method of the object passed to call() as an
// argument.
// this line below is equivalent to assigning
// displayQuote to sayIt, and calling oscarWilde.sayIt().
displayQuote.call(oscarWilde); // ouch!
// oscarWilde.displayQuote();
// 这么写则会抛出异常(IE:对象不支持此属性或方法)
// 由此可以看到call函数的强大。
图2中的最后一行表示的是将函数作为对象的方法调用的另一种方式。 请记住,JavaScript中的函数是对象。每个函数对象都有一个名为call的方法,它将函数(displayQuote)作为第一个参数(oscarWilde)的方法进行调用。就是说,作为函数第一个参数传递给call的任何对象都将在函数调用中成为 "this" 的值。这一技术对于调用基类构造函数来说非常有用,稍后将对此进行介绍。
注意在williamShakespeare和markTwain对象中,将displayQuote()函数赋给了这两个对象,而并没有将它赋给oscarWilde对象,williamShakespeare和markTwain对象调用displayQuote()函数如果还比较好理解的话,那么oscarWilde对象调用displayQuote()函数就比较难于理解了。
call()方法只是让oscarWilde对象调用displayQuote()方法,并没有将displayQuote()作为一个属性赋给oscarWilde对象。这与
var markTwain =
{
'memorableQuote': 'Golf is a good walk spoiled.',
'sayIt' : displayQuote
};
有着明显的不同。后者是使displayQuote方法称为对象的成员之一,而call不是,它只是调用。我们看到
// oscarWilde.displayQuote();
displayQuote.call(oscarWilde); // ouch!
// oscarWilde.displayQuote();
// 这么写则会抛出异常(IE:对象不支持此属性或方法)
oscarWilde.displayQuote();这一句不论放在call方法前还是放在call方法后执行都会抛异常。
有一点需要记住,绝不要调用包含"this"(却没有所属对象)的函数。否则,将违反全局命名空间,因为在该调用中,"this" 将引用全局对象,而这必然会给您的应用程序带来灾难。例如,下面的脚本将更改JavaScript的全局函数 isNaN 的行为。一定不要这样做!
alert(“NaN is NaN: “ + isNaN(NaN)); function x() { this.isNaN = function() { return “not anymore!”; }; } // alert!!! trampling the Global object!!! x(); alert(“NaN is NaN: “ + isNaN(NaN));
注意:isNaN()是JavaScript的一个全局函数,运行上面的程序可以看到,两次执行isNaN(NaN)结果是不一样的,这是因为执行x()函数时,x()函数中的"this"并没有指向某一个对象,这是"this"指向全局函数,则x()将i全局函数sNaN()的实现修改了。
到这里,我们已经介绍了如何创建对象,包括它的属性和方法。但如果注意上面的所有代码段,您就会发现属性和方法是在对象定义本身中进行硬编码的。但如果需要更好地控制对象的创建,该怎么办呢?例如,您可能需要根据某些参数来计算对象的属性值。或者,可能需要将对象的属性初始化为仅在运行时才能获得的值。也可能需要创建对象的多个实例(此要求非常常见)。
在C#中,我们使用类来实例化对象实例。但是JavaScript与此不同,因为它没有类。您将在下一节中看到,您可以充分利用这一情况:函数在于"new"运算符一起使用时,函数将充当构造函数。
发表评论
-
JavaScript 代码压缩工具
2011-02-16 15:15 901见附件,免费工具。 -
在服务器端判断request来自Ajax请求(异步)还是传统请求(同步)
2009-11-26 13:38 10672在服务器端判断request来自Ajax请求(异步)还是传 ... -
转:用Javascript来关闭IE浏览器和FireFox浏览器
2009-06-03 11:08 2137原文地址:http://hi.baidu.com/suen ... -
JavaScript 解析 JSON
2009-02-25 20:36 0JSON (JavaScript Object Not ... -
JavaScript的四舍五入运算
2009-02-02 13:49 1742function ForDight(Dight,How) { ... -
JavaScript 使用面向对象的技术创建高级 Web 应用程序
2009-01-19 21:44 1484转载: JavaScript 使用面 ... -
在JavaScript中使用面向对象
2009-01-18 17:05 1099原文地址:http://www.cnblo ... -
应当这样编写 JavaScript 代码吗?
2009-01-17 23:09 1091应当这样编写 JavaScript 代码吗? 您已经看到Ja ... -
JavaScript模拟命名空间
2009-01-17 17:35 1304JavaScript模拟命名空间 在C++和C#中,命名 ... -
JavaScript 从类继承
2009-01-17 17:32 1245从类继承 到这里,我们已经了解了构造函数和原型对象如何使您在 ... -
模拟私有属性
2009-01-07 15:46 1104模拟私有属性 现在介绍闭包如何帮助模拟私有成员。正常情况 ... -
闭 包
2009-01-07 15:10 1215闭包 我没有自觉地学习过JavaScript。我必须快点了解 ... -
静态属性和方法
2009-01-05 18:15 1290静态属性和方法 有时,您需要绑定到类而不是实例的属性或方法, ... -
原 型
2009-01-05 17:58 1032原型 在使用JavaScript的面向对象编程中,原型对象 ... -
构造函数而不是类
2009-01-04 23:15 1360构造函数而不是类 前面提到过,有关JavaScript ... -
insertAdjacentElement方法
2008-12-29 18:08 2444语法: oElement = object . inse ... -
javascript 中定义private 方法
2008-12-26 12:40 2253出处:http://aoqi1883.blog.163.co ... -
event.returnValue和return false的区别
2008-12-25 19:52 26563<!DOCTYPE html PUBLIC " ... -
按“回车”键提交表单
2008-12-25 19:17 2525<!DOCTYPE html PUBLIC " ... -
DWR 同步机制
2008-12-25 19:03 1446被一个小问题所困扰,一直到昨天,我最后 ...
相关推荐
一个超棒可视化学习函数式编程的游戏
*JavaScript,JavaScript函数,HTML,CSS语言的Code Assist功能。 *Outliner(大纲):显示JavaScript,HTML和CSS的代码结构。 *支持JavaScript,HTML,CSS代码提示,包括JavaScript 自定函数 *代码语法错误提示。 *...
prototype.js是一个非常优雅的javascript基础类库,对javascript做了大量的扩展,而且很好的支持Ajax,国外有多个基于此类库实现的效果库,也做得很棒。 prototype.js不仅是一个有很大实用价值的js库,而且有很...
很棒JavaScript项目 您是Web开发的新手,并且想深入研究Javascript吗? 您是否正在寻找一些很棒的Javascript项目,每个项目都将教给您一个重要的Javascript概念? 您是否想为一些Awesome Javascript项目做出贡献...
ScriptDeck ScriptDeck是一种在计算机上远程执行自己的javascript函数的方法。 ScriptDeck附带一个Web服务器和2个Websocket,这些Websocket承载一个配置网页,使您可以使用预先编写的或自己的功能轻松配置自己的按钮...
下面,我们将会介绍 2014 年最火的 21 款JavaScript 框架,专为前端开发者准备的哦:)众所周知, JavaScript 框架是 JavaScript编程语言最棒的特性之一。 JavaScript 框架是预先编写好的 JavaScript 库,为基于 ...
我喜欢 Underscore 和 Lodash —— 在 JavaScript 中使用 Lisp 和 Haskell 等函数式语言中的许多我习惯的操作非常棒。 尽管如此,他们仍有很多不足之处。 “包装”对象很笨重,并且很难将非 Underscore 函数混合到...
减速机造物主如果要在redux项目中使用它,请查看以下软件包: 描述Reducers Creator是一个很棒的小型javascript程序包,可让您轻松直观地创建reducer函数。 主要用于创建redux减速器。 请参阅: 安装npm install ...
这是一种让一切变为可能的基本结构,同时它也是Javascript最棒的特性。我们将简单地创建一个匿名函数并立即执行它。所有的代码将跑在这个函数内,生存在一个提供私有化的闭包中,它足以使得这些闭包中的变量能够贯穿...
功能强大的JavaScript日历控件 最关键的,无偿的永久的提供给大家免费使用,含全部源代码。 功能简介: 一、更人性化,更全面的功能 大部分日期控件都具备这些功能,但是本日历控件做的更全面,更人性化,并且速度...
作为 JavaScript 开发人员,Boiler.js 对我来说是一次很棒的学习体验。 在它的发展过程中,我能够将自己提升到一个新的水平。 话虽如此,我希望bobler.js 带来的新颖想法将帮助forkers 和其他人使未来JavaScript ...
prototype.js是一个非常优雅的javascript基础类库,对javascript做了大量的扩展,而且很好的支持Ajax,国外有多个基于此类库实现的效果库,也做得很棒。 prototype.js不仅是一个有很大实用价值的js库,而且有很...
{ var gbData = [ ‘啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍...
有很多很棒JavaScript动画库,但是对于我的需求而言,它们要么太复杂,要么太庞大。 他们都提供了我不需要的大量功能。 所以我开始为自己写一些简单的东西。 我最终得到了nAnimation 。 nAnimation并没有做任何形式...
真棒js :unicorn: JavaScript 基础知识和算法的精选列表。 Javascript 是 :red_heart: Maintained by : Sung Woo Park ##目录 ##基础知识 1.0 Javascript 原理 1.0.1 您能说出两个对 JavaScript 应用程序开发人员...
程序员面试刷题的书哪个好弃用...函数式程序员之道#article :很棒的阅读,即使您不是 React 用户。 : 这些都在说什么React式? 功能性? 承诺? 这是React式编程圣经的开端。 作者:约翰休斯,1984 年#paper #pdf A
JavaScript 中的动态类型很棒,它为创建 API 提供的灵活性也很棒。 然而,在 ES5 中没有命名参数,以及 JavaScript 处理函数参数的严格方式,它引入了很多代码异味。 看这个简单的例子: function ...
主要变化包括:Object.values / Object.entries,字符串填充,Object.getOwnPropertyDescriptor,尾随逗号,异步函数,共享内存和原子等。 ECMAScript 2018 初步函数初始化器,对象剩余/扩展属性,Promise.prototype...
city 一个省市县插件,可以展示省市,配合weui省市县非常棒; copy 不需要flash的复制插件 jq-star 打星评分 jqzoom 放大镜效果,淘宝看商品 jscolor 颜色选择框 validform 最好用的表单验证,使用非常容易 php.js 用js写...
让您的应用程序看起来很棒,没有压力 跨框架兼容:无论您使用的是样式组件、阿佛洛狄忒、镭还是普通的内联样式,只要您使用 JavaScript 编写样式,就可以使用优美的样式! 在 JS 中从预处理器切换到样式变得容易 ...