無廢話JavaScript教程(全集)第2/4頁
更新時間:2008年10月07日 23:28:35 作者:
許多讀者認為我那本《JavaScript語言精髓與編程實踐》讀來辛苦,所以我一直想寫個簡單的讀本。索性,這次就寫個最簡單的吧。
那么JavaScript當然……必然……可以面無愧色地支持直接量了——他們其實是一個概念。例如:
// in javascript
var
aByte = 256
只不過在理解的時候,一定要切記:所有上述的代碼中,所謂直接量或立即值,是指那個'256',而不是那
個變量或常量的標識符ABYTE/aByte。更進一步的,你要知道JavaScript支持了8種直接量聲明:
--------------------
數(shù)值:支持整數(shù),浮點和0x等進制前綴,以及……等等;
布爾值:true/false;
無值:undefined;
函數(shù):function() { ... },也稱為匿名函數(shù);
字符串:使用'..'或"..",支持多行和轉(zhuǎn)義符;
正則表達式:使用/../..,支持g,i,m等正則配置;
數(shù)組:使用[..],支持嵌套數(shù)組;
對象:使用{...},支持嵌套對象聲明;
--------------------
你可以把上述字符量作為一個個體,用在代碼——我的意思是表達式或語句行——的任意位置。用鼻子就可以
進行的推論是:
//既然可以寫:
aaa = 'hello, ' + 'world';
//那么就必然可以寫:
bbb = [1,2,3] + [4,5,6];
//同樣也就必然可以寫:
ccc = /abc/ + /cdf/
//同樣:
// ……
如上的,你可以把所有的直接量放在表達式或語句中間。偶爾的,因為語法解析的必要,你可能需要用一對
括號把這個直接量括起來——否則語法上會出現(xiàn)歧義,例如下面這個:
ddd = (function() {}) + (function() {})
好了,直接量原本就這么簡單,你只需要期望自己還有一個沒退化的鼻子就好了。
四、原型繼承
原型繼承可能是這個世界上最簡單不過的東西了。
我們假定一個對象是一張表——偉大的Anders就支持我這個假設(shè),他說JavaScript的對象是“屬性包”——
這樣的一個表中存放的就是“name=value”這樣的“名字/值”對。當我們想用下面的代碼:
aObj.name
去找值(value)時,就在表里查一下(用delphi的人應該記得TStringList吧)。對象,哦,所謂對象——在
我曾經(jīng)的理解里——就是“帶有繼承關(guān)系的結(jié)構(gòu)體(struct/record)”。那么,繼承關(guān)系是?
是這樣,如果上面的查找不成功,對于原型繼承來說,只需要在aObj這個對象的“原型”中找一下,就成了。
這個原型也是一個對象,記錄在構(gòu)造器函數(shù)的prototype屬性中。例如:
function MyObject() {
// ...
}
MyObject.prototype = xxx;
var aObj = new MyObject()
zzz = aObj.name;
當在aObj中找不到name這個屬性時,按照上面的規(guī)則,就會去xxx這個對象中找,也就是試圖找找"xxx.name"。
由于xxx本身也是一個對象,也會有一個構(gòu)造器函數(shù)(例如xxxObject()),因此當xxx.name也找不到時,就會
去xxxObject.prototype里面去找……如此……如此深層次的挖掘,直到再也找不到……就返回undefined。
多簡單啊,所謂原型繼承,只不過是一個簡單的檢索規(guī)則。
反過來說,你需要讓aObj能訪問到某個成員,也只需要修改一下它(或它們——一指類似aObj的實例)的原型
就好了。這在JavaScript中是非常常用的。例如你想讓所有的string都有某個屬性:
String.protoype.MyName = 'string'
又例如你想讓所有的對象都有某個屬性(或方法,或其它什么東東),那么:
Object.prototype.getMyName = function() {
return this.MyName;
}
多么美好,現(xiàn)在String也能getMyName了,函數(shù)也能getMyName了,所有沒有名字的也有名字了——當然,名
字是undefined。
沒名字也是名字,我沒想過你會不會變成哲學瘋子,對不起。
您可能感興趣的文章:
- JavaScript Break 和 Continue區(qū)別教程
- JavaScript入門教程(1) 什么是JS
- JavaScript 核心參考教程 內(nèi)置對象
- Aptana調(diào)試javascript圖解教程
- Javascript WebSocket使用實例介紹(簡明入門教程)
- javascript教程:關(guān)于if簡寫語句優(yōu)化的方法
- JavaScript基礎(chǔ)教程之a(chǎn)lert彈出提示框?qū)嵗?/a>
- JavaScript中的style.cssText使用教程
- JavaScript插件化開發(fā)教程 (一)
- JavaScript插件化開發(fā)教程 (二)
- Eclipse配置Javascript開發(fā)環(huán)境圖文教程
- javascript入門教程基礎(chǔ)篇
相關(guān)文章
javascript二維數(shù)組和對象的深拷貝與淺拷貝實例分析
這篇文章主要介紹了javascript二維數(shù)組和對象的深拷貝與淺拷貝,結(jié)合實例形式分析了JavaScript針對數(shù)組與對象的深拷貝及淺拷貝相關(guān)操作技巧,需要的朋友可以參考下2019-10-10JavaScript使用DeviceOne開發(fā)實戰(zhàn)(四)仿優(yōu)酷視頻應用
這篇文章主要介紹了JavaScript使用DeviceOne開發(fā)實戰(zhàn)(四)仿優(yōu)酷視頻應用的相關(guān)資料,需要的朋友可以參考下2015-12-12javascript封裝addLoadEvent實現(xiàn)頁面同時加載執(zhí)行多個函數(shù)的方法
這篇文章主要介紹了javascript封裝addLoadEvent實現(xiàn)頁面同時加載執(zhí)行多個函數(shù)的方法,實例分析了onload事件執(zhí)行的原理與同時執(zhí)行多個函數(shù)功能的實現(xiàn)技巧,需要的朋友可以參考下2016-07-07