⑴ (HTML)js裡面的function什麼時候才會用到啊
1.先載入DOM再載入JS會用到
window.onload=function(){};
這個表示是先載入dom文檔再執行JS代碼
2.要實現封裝、繼承、多態時都需要用到函數。
3.函數有復用代碼與減少代碼編寫的作用。
其實,function的使用方法很靈活的,要使用到的地方太多太多了,我沒法一一給你舉例
你可以參考這里:http://www.w3school.com.cn/js/js_functions.asp
希望幫助到你,有疑問可向我追問,盡我所能為你解答。
⑵ javaScript 的面向對象的開發能否實現多態
多態性表達為兩個方面:類型的模糊與類型的確認(或識別)。在一些高
級語言中,他們分別被表達為「as」和「is」這兩個關鍵詞或運算。
JavaScript 是弱 類型 的,通 過 typeof 運算 考察 變數時 ,它 要麼是 對象
(object),要麼是非對象 (number, undefined, string 等),絕不存在 「像是某個對
象或者某個類」這樣的多態問題。反過來說,因為任何一個實例的類型都是
object,因此 JavaScript 這種語言本身就「類型模糊 」的。
同樣由於沒有嚴格的類型檢測,因此你可以對任何對象調用任何方法,而
無需考慮它是否「被設計為」擁有該方法。對象的多態性被轉換為運行期的動
態特性——例如我們可以動態地添加對象的方法/成員,使它看起來象是某個對象。下面的例子說明這種情況:
function Bird() {
var bird = (arguments.length == 1 ? arguments[0] : this);
bird.wing = 2;
bird.tweet = function() { };
bird.fly = function() {
alert('I can fly.');
}
return bird;
}
// 測試 1: 讓一個對象 "fly" ,或讓一隻 ( 模仿的 ) 鳥 "fly"
var obj = new Object();
var bird = Bird(obj);
bird.fly(); // 能飛
obj.fly(); // 能飛
我們可以在這個例子中看到:obj 是不是 Bird 類型,並不是「fly」的必要前 提——
obj 在創建時,以及通過 Bird(obj)運算轉換後,都是一個 Object 類型的對象,
但它是可以「飛(fly)」的 。「能否飛行」只取決於它有沒有 fly 方法,而不取決
於它是不是某種類型的對象。
下面我們進述類型識別的問題。
由於所有對象的 typeof 值都是「object」,因此當在某些系統中要確知對象
的具體類型時,就需要使用 instanceof 運算來檢測了。在「1.5.4 對象及其成員
的檢查」中我們已經講過該運算,它其實就等效於其它高級語言中的 is 運算。
對於上例來說,如果我們要使對象「能否飛行」取決於它是否是 Bird 構造器
(等義於「類」)產生的實例,那麼應該使用類似下面的代碼:
// ( 續上例 )
// var obj = new Object();
// var bird = Bird(obj);
function doFly(bird) {
if (bird instanceof Bird) {
obj.fly();
}
else {
throw new Error(' 對象不是 Bird 或其子類的實例 .');
}
}
// 測試 2: Bird 的實例可以 "fly", Object 的實例不能 "fly".
doFly(new Bird()); // 能飛
doFly(bird); // 不能飛
然而多態性中的類型識別還不僅包括這些。另一個關鍵問題,是在類型繼
承中識別父類的同名方法。仍以上面的代碼為例,但我們現在遇到的是一隻鴕
鳥:
function Ostrich() {
this.fly = function() {
alert('I can\'t fly.');
}
}
Ostrich.prototype = new Bird();
Ostrich.prototype.constructor = Ostrich;
// 演示 : 鴕鳥是鳥,但不能飛
var ostrich = new Ostrich();
doFly(ostrich);
但是對於 doFly()這個函數來說,我們用以識別的表達式是:
(bird instanceof Bird)
這並有沒錯。因此這里也並不是 instanceof 運算的結果導致「飛」的失敗,而
是因為 Ostrich 類的 fly 方法覆蓋了父類方法。我們沒有理由說 Bird 的子類必
須象 Bird 一樣飛得很難看(例如 Phoenix 類一定是很藝術化地飛),而又「可
能」必須具體飛的能力 —— 因此子類必須依賴父類的某些能力來擴展新的方
法。
但是,沖突出現了:我們在實現子類 Ostrich 時已經覆蓋了 fly 方法。同樣 ,
我們實現 Phoenix 等等類時,也會覆蓋這個方法。於是我們想要「依賴父類的
某些方法」時,卻發現「找不到這些方法」了。
對於這一點,Delphi 提供了 inherited 語句,並保留了關鍵字 dynamic(動
態方法)和 virtual(虛方法)。但在 JavaScript 卻無法實現相應的功能。簡單地
說,如果子類與父類存在同名方法,那麼在對象理解「多態特性」時,是應該
視為子類還是父類的方法呢?好的,我們先給出答案。這個答案包括兩個部分:
1. JavaScript 中子類一定是覆蓋父類的同名方法的。因此方法同名時,腳本總是
直接調用子類方法;
2. 由於是(動態的)覆蓋,所以 JavaScript 中子類方法總是無法調用父類的同 名
方法。
進一步的推論是:JavaScript 無法依賴父類的同名方法(或被子類覆蓋的
其它方法)。
繼承父類的功能(而非僅是成員名稱)是構建復雜的對象系統時所必須的
特性。然而我們看到 JavaScript 自身並不具備這種能力,這與 JavaScript 初始
設計時的主要應用環境有關:它是用於瀏覽器客戶端快速開發的一種腳本語
言,而不是用於構建大型系統的通用語言。
當 JavaScript 用作一種富瀏覽器客戶端(RWC)中的開發語言,或者一種
客戶端應用開發的輔助語言(例如插件或外掛腳本)時,它在組織對象系統方
面的缺點就凸顯出來,成為噬待解決的問題。本書第二部分將在 Qomo 內核構
建的過程中討論相關的方法,並解決這些問題。
⑶ javascript中的rect()問題!!
你可以看看rect函數的源碼 或者把它貼出來看看
js對函數參數數目不是很嚴格,如果是4個形參,你只傳入3個實參,它就把第4個參數置為null,這個也是js多態的體現