快捷搜索:

Javascript实例教程(4) 探测浏览器插件

你可能对付一些其它的编程说话很认识,比如C++或者Java等等,它们也是可以创建工具的,现在最新的VB版本VB.NET也具有了更好的面向工具功能-----创建工具。从本色上讲,创建工具的设法主见只是为了创建一个简单的实体,这个实体包孕了许多属性和措施。以下是一个工具构造器的例子:

function Person(name, age, colour) {

this.name = name;

this.age = age;

this.colour = colour;

}

然后,我们可以这样来调用Person构造器:

var somebody = new Person("Patrick", 22, "red");

或者从用户那里获得输入数值:

var pName = prompt("What is your name?");

var pAge = prompt("How old are you this year?");

var pColour = prompt("What is your favourite colour?");

var somebody = new Person(pName, pAge, pColour);

所有在JavaScript中得构造器,就象在Java中,都可以使用new关键字来进行调用。当一个person使用它的属性{"Patrick", 22, "red"}被创建(或者说被构造)的时刻,这些数值就可以造访了,比如 :

somebody.name, or

somebody["name"]

"Patrick"

somebody.age, or

somebody["age"]

22

somebody.colour, or

somebody["colour"]

"red"

由于我们使用name增添了Person的属性,以是它们必须经由过程name来被引用,这点在后面的代码中可以看到。假如我们应用数字,那么我们就必须应用数字来引用,比如要用somebody[0],而不用somebody.name。Javascript的数组和工具(比如 forms,images,frames,…)都容许这两种措施。

别的地,数组和工具都有一个本色的属性,即length(长度)。我们在体例法度榜样的时刻,可以这样来应用它:objectName.length,它返回工具包孕的元素或者属性的个数。

属性同样也可以从函数中来创建,这样,你只必要增添一行到Person函数中就可以创建属性了: function Person(name, age, colour) {

this.name = name;

this.age = age;

this.colour = colour;

this.birthYear = (new Date()).getYear() - this.age;

}

以上的Person函数定义了第四个属性:birthYear,它代表每一个Person的诞生年份。这里要留意,这一增添的行是调用一个内置的Date构造器,它返回一个包孕了当前日期和光阴的Date工具。

这是一个异常怠惰的措施来造访一个Date变量。以是应用下面的代码会显得更准确些,更有可读性:

var today = new Date();

this.birthYear = today.getYear() - this.age;

当然,有许多措施来对JavaScript法度榜样进行“压缩”。经由过程插入工具到代码中,你就可以处置惩罚绝大年夜多半的变量。

这个Date工具比起我们上面定义的Person工具来说更繁杂,由于它包括了造访措施(accessor/get)以及操作措施(manipulator/set)。同时,增添简单的工具措施到JavaScript中是可能,下面是具体的例子代码:

otherPerson.age); // 返回布尔型数值

}

//下面的代码用于测试我们的函数

var body1 = new Person("Patrick", 22, "red");

var body2 = new Person("Betty", 21, "green");

document.write(body1); //这里为Person.toString()创建一个调用

document.write(body2);

document.write(body1.name);

document.write((body1.isOlder(body2)) ? " is " : " is not "); // 是否更老?

document.write("older than " + body2.name);

// Stop hiding -->

经由过程为Person工具重载Person.toString()措施,我们可以将Person工具作为字符串显示出来。每当Person工具被作为字符串引用的时刻,pringPerson返回的数值就抉择了该显示什么了。

上面脚本的输出如下所示:

Patrick was born in 76

and is 22 years old.

Betty was born in 77

and is 21 years old.

Patrick is older than Betty

从输出的结果我们可以看到年份因此两位数字表示的,如1976年只用76来表示。以是你可能想增添“19”到这两位数字的前面。不幸的是,“千年虫”的问题使得你处置惩罚起来有点棘手。而不合的浏览器处置惩罚Date工具的getYear()措施是不合的。

Year(年份)

Navigator浏览器

IE 3.x浏览器

IE 4.x浏览器

1998

98

98

98

1999

99

99

99

2000

2000

100

2000

2001

2001

101

2001

你可以从上面表格中发明最新的浏览器支持1999年之后四位的年份款式(如2000、2001)。不幸的是,老的浏览器处置惩罚年份的款式的时刻给法度榜样设计职员无尽的利诱。我常常应用的详细办理措施如下所示,与大年夜家共享:

var thisYear = (new Date()).getYear();

thisYear = 1900 + (thisYear % 1900);

这里(thisYear % 1900)感化是将年份转换位IE 3.x款式并且增添1900以获得真实的年份(比如,2002年颠末this Year%1900转换位IE 3.x款式位102,然后102再加上1900获得2002)。上面这两条语句可以适用于从1900年到3799年的处置惩罚,现在看起来这么长的光阴是足够应用了。然则,为了避免类似于“千年虫”问题,我们应该再找出更好的办理规划,在本教程中就不给出了。别的,新的ECMA标准包括了一个名为getFullYear()的函数,它是返回完备的年份款式,然则这个函数只能被Navigator 4支持,在IE中是不能应用的。

着末对法度榜样再做一点改进,我们可以改动People构造器以转换年份为YYYY款式,详细代码如下:

this.birthYear = 1900 + (((new Date()).getYear() - this.age) % 1900);

在JavaScript中应用工具的能力平日被许多法度榜样设计职员所漠视。然则从本教程中,你应该可以看到应用工具可以使法度榜样员设计出功能更强大年夜的利用法度榜样来的。

您可能还会对下面的文章感兴趣: