大量的使用javascript遇到問題,首先是js物件的封裝,js沒有提供類別的機制,唯一的內建類別是function類,也就是說所有的函數都是function類別的實例化物件。不過依靠這個唯一的類別我們可以模擬定義一個新的類別。
#首先想到的,是直接用function產生定義完整的類別:
function myClass(arg,...) { this.attributeName; this.functionName = function(){}; }
不過這樣有一個問題,每當new一個新的myClass實例的時候,內部的function都會重新開啟空間,回傳引用給functionName。但這和我們設想的類別不一致,浪費空間,而且理論上類別的function應該是共享的。
更合理的做法,一是在類別外定義函數,然後類別內將函數指標賦值給functionName,另一種是在類別外myClass.prototype.functionName = function(){}。這兩種都是不錯的選擇,其中第二個看起來更接近類別的定義。
接下來var newObj = new myClass();大功告成。
關於js無名函數
無名函數,其中一個作用可能是產生新的函數物件的引用,主要是用於定義。
另一個用處就是針對js中一些無法包含的回呼函數而言的。
明顯的例子就是setInterval,我想這是許多人頭痛的一個函數,尤其是當你想要在回呼函數中加入參數的時候。
而且最叫人頭痛的是,DHTML不是w3c規定的標準,於是不同的瀏覽器給的setInterval參數表還不一樣。 。 。
就測試的兩款瀏覽器來說(IE內核,webkit內核)
IE:setInvterval(function, msecond [,lang]);
#chrome:setInterval (function, msecond [, pram1, pram2, ....]);
#也就是說,chrome裡面是允許對function新增參數的,參數表在最後邊。然而IE最後一個參數的功能是標示所使用的腳本語言種類,因為IE除了js還支援vbs等其他的腳本語言。
為了解決相容性,只好用到無名函數。 。 。
function test(yourArg) { var arg = yourArg; setInterval(function(){callback(arg)}, time); }
以上是如何定義javascript物件導向中的類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!