JavaScript的Prototype屬性
The JavaScript Prototype Property
JavaScript沒有提供傳統(tǒng)的類結(jié)構(gòu),使你可以通過繼承它,然后加入新功能來擴(kuò)展一個(gè)類。相反,這門語言使用prototype屬性來擴(kuò)展現(xiàn)有對象,以及它們的示例。
prototype是在運(yùn)行期定義的一個(gè)屬性和方法的集合,它對對象的每個(gè)示例都是有效的,而且不管這些示例是在prototype修改前,還是修改后建立的。
prototype在JavaScript中的工作原理是:當(dāng)訪問對象的屬性時(shí),瀏覽器的腳本引擎首先會(huì)從本地屬性(native propertie)中查找這個(gè)屬性,接著會(huì)在prototype屬性中進(jìn)行查找。如果在prototype屬性中沒有找到,它就會(huì)檢查示例級(jí)的屬性。
在如下的代碼中,我們使用prototype屬性,來擴(kuò)展Number對象,在這里,我們添加了一個(gè)新的屬性percentage,以及一個(gè)新的方法adjustValue:
Number.prototype.percentage = 0.15; // 15% {
我們可以像訪問本地屬性一樣訪問新屬性: var someValue = 3.0; alert(someValue.adjustValue());
這個(gè)應(yīng)用程序會(huì)顯示一個(gè)消息,這個(gè)消息會(huì)把調(diào)整后的值顯示出來,也就是將初始值3.0乘以0.15。
Prototype庫利用prototype的能力,為某些內(nèi)置對象添加擴(kuò)展,例如:String、Array、Function。下面就是一個(gè)對stripTags方法進(jìn)行擴(kuò)展的示例,它可以剔除字符串中所有元素的標(biāo)簽。
var str = "<p>This is a paragraph</p>"; var newStr = str.stripTags(); // 結(jié)果是“This is a paragraph”
JavaScript的prototype屬性的功能相當(dāng)強(qiáng)大,而且在很大程度上構(gòu)成了Prototype庫的基礎(chǔ)。但同時(shí)它也是有風(fēng)險(xiǎn)的。 |
|