1. 面向?qū)ο笳Z言的四個要素:封裝、聚合(Aggregation)、繼承、多態(tài)。
ps. Aggragation - the capability to store one object inside of another object
(貌似這本書并沒有區(qū)分Object-based和Object-oriented)
2. 創(chuàng)建對象
基本和Java一樣,但對于無參構(gòu)造器,也可以使用類似Delphi的沒有括號的語法。
var oStringObject = new String;
3. ECMAScript也有垃圾收集機制,不過早期版本的瀏覽器不支持。
4. 由于弱類型機制,ECMAScript不支持早期綁定,因此對象的方法和屬性可以在運行期定義。
5. ECMA-262定義的基礎類:
Object, Function, Array, String, Boolean, Number, Date, RegExp, Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError
6. String類的方法:
join, split, concat, slice, push(), pop(), shift(), unshift(), reverse(), sort() 方法略,還有個貌似挺麻煩的splice方法。
7. Data類
翻了下,發(fā)現(xiàn)顯示當前時間只要new Date().toLocaleTimeString()就行了,寫Project2時土了
8. Global類
因為在JavaScript中并沒有單獨存在的函數(shù),所有的函數(shù)都必須是已經(jīng)存在的對象所屬的函數(shù)。
于是有了Global類,包含所有“獨立”函數(shù)的類。
貌似Global類的函數(shù)比較有用
a)
var sUri = “http://www.wrox.com/illegal value.htm#start”;
alert(encodeURI(sUri));
alert(encodeURIComponent(sUri));
輸出:
http://www.wrox.com/illegal%20value.htm#start
http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start
區(qū)別在于encodeURI不處理屬于URI的特殊字符,如;/?:;而encodeURIComponents處理所有特殊字符。
相應的有decodeURI和decodeURIComponents方法。
b)
eval 方法
很強大,但要小心使用,容易被注入惡意代碼。
9. Math 類
用的時候再查API吧。。。
10. 作用域
a) JavaScript 所有的元素都是public的。無疑這會增加編程的難度,于是有了一種約定,即用兩個下劃線修飾命名“私有”變量。如
obj.__color__= "red";
就表示color是obj的一個私有變量(注意這只是一個約定,意味著其他程序員不應該使用這個變量)
也有寫成obj._color的。
b) JavaScript 也沒有嚴格意義上的static域。

function sayHi()
{
alert(“hi”);
}


sayHi.alternate = function()
{
alert(“hola”);
};

sayHi(); //outputs “hi”
sayHi.alternate(); //outputs “hola”
這里,alternate實際上是函數(shù)sayHi的一個方法。
11. 還是創(chuàng)建對象
由于JavaScript并沒有提供真正意義上的構(gòu)造方法,開發(fā)者們使用了不同的模式創(chuàng)建對象(怎么老覺得JavaScript這個語言是開發(fā)者在不斷適應它,而不是它不斷適應開發(fā)者呢 -,-)
a) Factory

function createCar(sColor, iDoors, iMpg)
{
var oTempCar = new Object;
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;

oTempCar.showColor = function ()
{
alert(this.color)
};
return oTempCar;
}

var oCar1 = createCar(“red”, 4, 23);
var oCar1 = createCar(“blue”, 3, 25);
oCar1.showColor(); //outputs “red”
oCar2.showColor(); //outputs “blue”
另外也可以把showColor這個方法在外部聲明,然后使用oTempCar.showColor = showColor;
b) Constructor

function Car(sColor, iDoors, iMpg)
{
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;

this.showColor = function ()
{
alert(this.color)
};
}

var oCar1 = new Car(“red”, 4, 23);
var oCar2 = new Car(“blue”, 3, 25);
c) Protopype

function Car()
{
}

Car.prototype.color = “red”;
Car.prototype.doors = 4;
Car.prototype.mpg = 23;

Car.prototype.showColor = function ()
{
alert(this.color);
};

var oCar1 = new Car();
var oCar2 = new Car();
這種模式的好處在于,允許instanceof操作符進行類型判斷。但也有缺陷,例如

function Car()
{
}

Car.prototype.color = “red”;
Car.prototype.doors = 4;
Car.prototype.mpg = 23;
Car.prototype.drivers = new Array(“Mike”, “Sue”);

Car.prototype.showColor = function ()
{
alert(this.color);
};

var oCar1 = new Car();
var oCar2 = new Car();
oCar1.drivers.push(“Matt”);
alert(oCar1.drivers); //outputs “Mike,Sue,Matt”
alert(oCar2.drivers); //outputs “Mike,Sue,Matt”
原因在于prototype的drivers是所有Car共享的一個對象。
d) constructor和prototype的結(jié)合

function Car(sColor, iDoors, iMpg)
{
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.drivers = new Array(“Mike”, “Sue”);
}


Car.prototype.showColor = function ()
{
alert(this.color);
};

var oCar1 = new Car(“red”, 4, 23);
var oCar2 = new Car(“blue”, 3, 25);
oCar1.drivers.push(“Matt”);
alert(oCar1.drivers); //outputs “Mike,Sue,Matt”
alert(oCar2.drivers); //outputs “Mike,Sue”
That's more like it.
內(nèi)存沒有浪費,也沒有因為共享對象的問題,也可以使用instanceof操作符。
e) 貌似還不夠 --動態(tài)創(chuàng)建

function Car(sColor, iDoors, iMpg)
{
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.drivers = new Array(“Mike”, “Sue”);

if (typeof Car._initialized == “undefined”)
{

Car.prototype.showColor = function ()
{
alert(this.color);
};
Car._initialized = true;
}
}
這樣就產(chǎn)生了類似static的效果,Car.prototype的內(nèi)容只需在第一次創(chuàng)建對象時被初始化。
f) 改版后的Factory模式

function Car()
{
var oTempCar = new Object;
oTempCar.color = “red”;
oTempCar.doors = 4;
oTempCar.mpg = 23;

oTempCar.showColor = function ()
{
alert(this.color)
};
return oTempCar;
}
不建議使用,除非實在需要(貌似和XML有關)
12. 修改對象
比較簡單,直接帖幾個例子

Object.prototype.showValue = function ()
{
alert(this.valueOf());
};

var str = “hello”;
var iNum = 25;
str.showValue(); //outputs “hello”
iNum.showValue(); //outputs “25”

Function.prototype.toString = function ()
{
return “Function code hidden”;
};

//The previous code is perfectly legal and works as expected:

function sayHi()
{
alert(“hi”);
}
alert(sayHi.toString()); //outputs “Function code hidden”
學了不少,明天開始看繼承,恩
ps. Aggragation - the capability to store one object inside of another object
(貌似這本書并沒有區(qū)分Object-based和Object-oriented)
2. 創(chuàng)建對象
基本和Java一樣,但對于無參構(gòu)造器,也可以使用類似Delphi的沒有括號的語法。
var oStringObject = new String;
3. ECMAScript也有垃圾收集機制,不過早期版本的瀏覽器不支持。
4. 由于弱類型機制,ECMAScript不支持早期綁定,因此對象的方法和屬性可以在運行期定義。
5. ECMA-262定義的基礎類:
Object, Function, Array, String, Boolean, Number, Date, RegExp, Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError
6. String類的方法:
join, split, concat, slice, push(), pop(), shift(), unshift(), reverse(), sort() 方法略,還有個貌似挺麻煩的splice方法。
7. Data類
翻了下,發(fā)現(xiàn)顯示當前時間只要new Date().toLocaleTimeString()就行了,寫Project2時土了
8. Global類
因為在JavaScript中并沒有單獨存在的函數(shù),所有的函數(shù)都必須是已經(jīng)存在的對象所屬的函數(shù)。
于是有了Global類,包含所有“獨立”函數(shù)的類。
貌似Global類的函數(shù)比較有用
a)



http://www.wrox.com/illegal%20value.htm#start
http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start
區(qū)別在于encodeURI不處理屬于URI的特殊字符,如;/?:;而encodeURIComponents處理所有特殊字符。
相應的有decodeURI和decodeURIComponents方法。
b)
eval 方法
很強大,但要小心使用,容易被注入惡意代碼。
9. Math 類
用的時候再查API吧。。。
10. 作用域
a) JavaScript 所有的元素都是public的。無疑這會增加編程的難度,于是有了一種約定,即用兩個下劃線修飾命名“私有”變量。如
obj.__color__= "red";
就表示color是obj的一個私有變量(注意這只是一個約定,意味著其他程序員不應該使用這個變量)
也有寫成obj._color的。
b) JavaScript 也沒有嚴格意義上的static域。














11. 還是創(chuàng)建對象
由于JavaScript并沒有提供真正意義上的構(gòu)造方法,開發(fā)者們使用了不同的模式創(chuàng)建對象(怎么老覺得JavaScript這個語言是開發(fā)者在不斷適應它,而不是它不斷適應開發(fā)者呢 -,-)
a) Factory



















b) Constructor



















































d) constructor和prototype的結(jié)合




















內(nèi)存沒有浪費,也沒有因為共享對象的問題,也可以使用instanceof操作符。
e) 貌似還不夠 --動態(tài)創(chuàng)建


















f) 改版后的Factory模式














12. 修改對象
比較簡單,直接帖幾個例子























學了不少,明天開始看繼承,恩