使用面向对象技术创建高级Web应用程序

本文深入探讨了JavaScript中对象的概念,将其比作字典,并详细解释了如何动态添加和访问属性。同时,文章阐述了JavaScript函数的独特性,包括其作为对象的特性,以及如何在运行时创建和修改函数。

JavaScript对象是字典

在C++或C#中,当谈及对象时,我们指的是类或者结构的实例。对象根据实例化出它的模版(也即,类)的不同而具有不同的属性和方法。JavaScript对象不是这样的。在JavaScript中,对象仅仅是name/value对的集合,我们可以把JavaScript对象看作字典,字典中的键为字符串。我们可以用我们熟悉的"." (点)操作符或者一般用于字典的"[]"操作符,来获取或者设置对象的属性。下面的代码片段

1var userObject = new Object();
2userObject.lastLoginTime = new Date();
3alert(userObject.lastLoginTime);

 

同这段代码所做的完全是同样的事情:

1var userObject = {}; // equivalent to new Object()
2userObject["lastLoginTime"] = new Date();
3alert(userObject["lastLoginTime"]);

 

我们还可以用这样的方式,直接在userObject的定义中定义lastLoginTime属性:

1var userObject = { "lastLoginTime": new Date() };
2alert(userObject.lastLoginTime);

 

请注意这同C# 3.0的对象初始化表达式是多么的相似。另外,熟悉Python的读者会发现,在第二段和第三段代码中,我们实例化userObject的方式就是Python中指定字典的方式。这里唯一的区别的就是,JavaScript中的对象/字典只接受字符串作为键,而Python中字典则无此限制。

这些例子也表明,同C++或者C#对象相比,JavaScript对象是多么地更加具有可塑性。属性lastLoginTime不必事先声明,如果在使用这个属性的时候userObject还不具有以此为名的属性,就会在userObject中把这个属性添加进来。如果记住了JavaScript对象就是字典的话,你就不会对此大惊小怪了 —— 毕竟我们随时都可以把新键(及其对应的值)添加到字典中去。

JavaScript对象的属性就是这个样子的。那么,JavaScript对象的方法呢?和属性一样,JavaScript仍然和C++/C#不同。为了理解对象的方法,就需要首先仔细看看JavaScript函数。

JavaScript中的函数具有首要地位

在许多编程语言中,函数和对象一般都认为是两种不同的东西。可在JavaScript中,它们之间的区别就没有那么明显了 —— JavaScript中的函数实际上就是对象,只不过这个对象具有同其相关联的一段可执行代码。请看下面这段再普通不过的代码:

1function func(x) {
2    alert(x);
3}
4func("blah");

这是JavaScript中定义函数最常用的方式了。但是,你还可以先创建一个匿名函数对象再将该对象赋值给变量func,也即,象下面那样,定义出完全相同的函数

1var func = function(x) {
2    alert(x);
3};
4func("blah2");

或者甚至通过使用Function构造器,向下面这样来定义它:

1var func = new Function("x", "alert(x);");
2func("blah3");

这表明,函数实际上就是一个支持函数调用操作的对象。最后这种使用Function构造器来定义函数的方式并不常用,但却为我们带来很多很有趣的可能,其原因可能你也已经发现了,在这种函数定义的方式中,函数体只是Function构造器的一个字符串型的参数。这就意味着,你可以在JavaScript运行的时候构造出任意的函数。

要进一步证明函数是对象,你可以就象为任何其它JavaScript对象一样,为函数设置或添加属性:

1function sayHi(x) {
2    alert("Hi, " + x + "!");
3}
4 
5sayHi.text = "Hello World!";
6sayHi["text2"] = "Hello World... again.";
7 
8alert(sayHi["text"]); // displays "Hello World!"
9alert(sayHi.text2); // displays "Hello World... again."

 

作为对象,函数还可以赋值给变量、作为参数传递给其它函数、作为其它函数的返回值、保存为对象的属性或数组中的一员等等。转载请注明诚信在线开户http://www.wind-fixasia.com

转载于:https://www.cnblogs.com/treryh/p/3173761.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值