Javascript實例教程(4) 探測瀏覽器插件

2022-06-12發(fā)布者:ylm大?。?/span> 下載:0

文件大小:

軟件介紹

你可能對于一些其它的編程語言很熟悉,比如C++或者java等等,它們也是可以創(chuàng)建對象的,現(xiàn)在最新的VB版本VB.NET也具有了更好的面向?qū)ο蠊δ?----創(chuàng)建對象。從本質(zhì)上講,創(chuàng)建對象的想法只是為了創(chuàng)建一個簡單的實體,這個實體包含了許多屬性和方法。以下是一個對象構(gòu)造器的例子:

function Person(name, age, colour) {

this.name = name;

this.age = age;

this.colour = colour;

}

然后,我們可以這樣來調(diào)用Person構(gòu)造器:

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

或者從用戶那里得到輸入數(shù)值:

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中得構(gòu)造器,就象在Java中,都可以利用new關(guān)鍵字來進(jìn)行調(diào)用。當(dāng)一個person利用它的屬性{"Patrick", 22, "red"}被創(chuàng)建(或者說被構(gòu)造)的時候,這些數(shù)值就可以訪問了,比如 :

somebody.name, or
 somebody["name"]
 "Patrick"
 
somebody.age, or
 somebody["age"]
 22
 
somebody.colour, or
 somebody["colour"]
 "red"
 


因為我們利用name增加了Person的屬性,所以它們必須通過name來被引用,這點在后面的代碼中可以看到。如果我們使用數(shù)字,那么我們就必須使用數(shù)字來引用,比如要用somebody[0],而不用somebody.name。Javascript的數(shù)組和對象(比如 forms,images,frames,…)都允許這兩種方法。

另外地,數(shù)組和對象都有一個本質(zhì)的屬性,即length(長度)。我們在編制程序的時候,可以這樣來使用它:objectName.length,它返回對象包含的元素或者屬性的個數(shù)。
屬性同樣也可以從函數(shù)中來創(chuàng)建,這樣,你只需要增加一行到Person函數(shù)中就可以創(chuàng)建屬性了: function Person(name, age, colour) {

this.name = name;

this.age = age;

this.colour = colour;

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

}

以上的Person函數(shù)定義了第四個屬性:birthYear,它代表每一個Person的出生年份。這里要注意,這一增加的行是調(diào)用一個內(nèi)置的Date構(gòu)造器,它返回一個包含了當(dāng)前日期和時間的Date對象。

這是一個非常懶惰的方法來訪問一個Date變量。所以使用下面的代碼會顯得更準(zhǔn)確些,更有可讀性:

var today = new Date();

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

當(dāng)然,有許多方法來對JavaScript程序進(jìn)行“壓縮”。通過插入對象到代碼中,你就可以處理絕大多數(shù)的變量。

這個Date對象比起我們上面定義的Person對象來說更復(fù)雜,因為它包括了訪問方法(accessor/get)以及操作方法(manipulator/set)。同時,增加簡單的對象方法到JavaScript中是可能,下面是詳細(xì)的例子代碼:

<SCRIPT language="JavaScript">

<!-- Hide from older browsers


function Person(name, age, colour) {

this.name = name;

this.age = age;

this.colour = colour;

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

this.toString = printPerson; // 這里定義the Person.toString() 方法

this.isOlder = isOlder; // 這里定義Person.isOlder(Person) 方法

}


function printPerson() {

var text = this.name + " was born in " + this.birthYear +"<br>";

text += "and is " + this.age + " years old.<p>";

return text;

}


function isOlder(otherPerson) { // 這里定義是否第一個人是更老的

return (this.age > otherPerson.age); // 返回布爾型數(shù)值

}


//下面的代碼用于測試我們的函數(shù)


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

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


document.write(body1); //這里為Person.toString()創(chuàng)建一個調(diào)用

document.write(body2);


document.write(body1.name);

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

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


// Stop hiding -->

</SCRIPT>
通過為Person對象重載Person.toString()方法,我們可以將Person對象作為字符串顯示出來。每當(dāng)Person對象被作為字符串引用的時候,pringPerson返回的數(shù)值就決定了該顯示什么了。

上面腳本的輸出如下所示:

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

從輸出的結(jié)果我們可以看到年份是以兩位數(shù)字表示的,如1976年只用76來表示。所以你可能想增加“19”到這兩位數(shù)字的前面。不幸的是,“千年蟲”的問題使得你處理起來有點棘手。而不同的瀏覽器處理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
 


你可以從上面表格中發(fā)現(xiàn)最新的瀏覽器支持1999年之后四位的年份格式(如2000、2001)。不幸的是,老的瀏覽器處理年份的格式的時候給程序設(shè)計人員無盡的困惑。我經(jīng)常使用的具體解決方法如下所示,與大家共享:

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

thisYear = 1900 + (thisYear % 1900);

這里(thisYear % 1900)作用是將年份轉(zhuǎn)換位IE 3.x格式并且增加1900以得到真實的年份(比如,2002年經(jīng)過this Year%1900轉(zhuǎn)換位IE 3.x格式位102,然后102再加上1900得到2002)。上面這兩條語句可以適用于從1900年到3799年的處理,現(xiàn)在看起來這么長的時間是足夠使用了。但是,為了避免類似于“千年蟲”問題,我們應(yīng)該再找出更好的解決方案,在本教程中就不給出了。另外,新的ECMA標(biāo)準(zhǔn)包括了一個名為getFullYear()的函數(shù),它是返回完整的年份格式,但是這個函數(shù)只能被Navigator 4支持,在IE中是不能使用的。

最后對程序再做一點改進(jìn),我們可以修改People構(gòu)造器以轉(zhuǎn)換年份為YYYY格式,具體代碼如下:

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

在JavaScript中使用對象的能力通常被許多程序設(shè)計人員所忽視。但是從本教程中,你應(yīng)該可以看到使用對象可以使程序員設(shè)計出功能更強(qiáng)大的應(yīng)用程序來的。

發(fā)表評論(共0條評論)
請自覺遵守互聯(lián)網(wǎng)相關(guān)政策法規(guī),評論內(nèi)容只代表網(wǎng)友觀點,發(fā)表審核后顯示!

版權(quán)聲明:

1 本站所有資源(含游戲)均是軟件作者、開發(fā)商投稿,任何涉及商業(yè)盈利目的均不得使用,否則產(chǎn)生的一切后果將由您自己承擔(dān)!

2 本站將不對任何資源負(fù)法律責(zé)任,所有資源請在下載后24小時內(nèi)刪除。

3 若有關(guān)在線投稿、無法下載等問題,請與本站客服人員聯(lián)系。

4 如侵犯了您的版權(quán)、商標(biāo)等,請立刻聯(lián)系我們并具體說明情況后,本站將盡快處理刪除,聯(lián)系QQ:2499894784

返回頂部