關於js類的定義

來源:互聯網
上載者:User

遇到的問題,首先是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);
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.