面向對象的Javascript之一(初識Javascript)
2024-05-06 14:22:33
供稿:網友
1. Javascript最大的特性在于其靈活性。作為一名前端開發人員,既可以采用函數式的編程風格,也可以采用更復雜一點的面向對象的編程風格。不管你采用哪種風格,都可以完成一些非常有用的任務。因而,Javascript是一門面向過程的語言,同時也是一門面向對象的語言,進而可以模仿面向對象語言的編程模式和慣用法。我們用一個例子來說明:啟動和停止動畫。
如果你習慣于函數式的編程風格,代碼會如下:
代碼如下:
function startAnimation() {
//啟用動畫
}
function stopAnimation() {
//停止動畫
}
這種方法很簡單,但卻無法創建保存狀態以及僅對內部狀態進行操作的動畫對象。下面我們定義一個類:
代碼如下:
var Animation = function() {
//動畫類
};
Animation.prototype.start = function() {
//啟用動畫
};
Animation.prototype.stop = function() {
//停止動畫
};
/*用法如下*/
var anim = new Animation();
anim.start();
anim.stop();
如果你想將類的定義封裝到一條聲明中,則代碼如下:
代碼如下:
var Animation = function() {
//動畫類
};
Animation.prototype = {
start: function(){
//啟用動畫
},
stop: function(){
//停止動畫
}
};
這樣讓面向對象的程序員看起來更加眼熟,我們可以試著嘗試更復雜一點的寫法:
代碼如下:
Function.prototype.method = function(name, fn){
this.prototype[name] = fn;
}
var Animation = function() {
//動畫類
};
Animation.method("start", function(){
//啟用動畫
});
Animation.method("stop", function(){
//停止動畫
});
我們為Function類擴展了一個方法method用于添加新方法。name代表函數名稱,fn代表函數的具體實現。在基于此寫法的基礎之上,我們可以讓函數支持鏈式調用:
代碼如下:
Function.prototype.method = function(name, fn){
this.prototype[name] = fn;
return this;
}
var Animation = function() {
//動畫類
};
Animation.method("start", function(){
//啟用動畫
}).method("stop", function(){
//停止動畫
});
至此已經見識了5種不同的編程風格,具有不同的代碼量、編碼效率和執行性能。你可以選擇最適合當前項目的編程風格來進行工作。
2. Javascript是一門弱類型語言。聲明變量時不必指定類型,但并不代表沒有類型。Javascript包含三種基本類型:布爾型、數值型和字符串類型,此外還包含對象類型和函數類型,最后還包含空類型和未定義類型。基本類型按值傳遞,其他類型按引用傳遞??梢愿鶕兞抠x值改變類型,基本類型之間可以相互轉換。toString()可以把數值或布爾值轉化為字符串,parseInt()和parseFloat()可以將字符串轉化為數值,雙"非"操作可以將字符串或數值轉化為布爾值。