關(guān)于js類的定義
更新時(shí)間:2011年06月28日 19:22:16 作者:
這兩天幫同學(xué)做秒殺網(wǎng),打算將前臺和后臺徹底分離,僅用ajax通信。這樣就免不了大量的使用javascript,于是發(fā)現(xiàn),js果然是難學(xué)難用。
遇到的問題,首先是js對象的封裝,js沒有提供類的機(jī)制,唯一的內(nèi)置類是function類,也就是說所有的函數(shù)都是function類的實(shí)例化對象。不過依靠這個(gè)唯一的類我們可以模擬定義一個(gè)新的類。
首先想到的,是直接用function生成定義完整的類:
function myClass(arg,...)
{
this.attributeName;
this.functionName = function(){};
}
不過這樣有一個(gè)問題,每當(dāng)我new一個(gè)新的myClass實(shí)例的時(shí)候,內(nèi)部的function都會(huì)重新開辟空間,返回引用給functionName。但這個(gè)和我們設(shè)想的類不一致,浪費(fèi)空間,而且理論上類的function應(yīng)該是共享的。
更合理的做法,一是在類外定義函數(shù),然后類內(nèi)將函數(shù)指針賦值給functionName,另一種是在類外myClass.prototype.functionName = function(){}。這兩種都是不錯(cuò)的選擇,其中第二個(gè)看起來更接近類的定義。
接下來var newObj = new myClass();大功告成。
關(guān)于js(二)無名函數(shù)
無名函數(shù),其中一個(gè)作用可能是生成新的函數(shù)對象的引用,主要是用于定義。
另一個(gè)用處就是針對js中一些無法含參的回調(diào)函數(shù)而言的。
明顯的例子就是setInterval,我想這是很多人頭疼的一個(gè)函數(shù),尤其是你想在回調(diào)函數(shù)中添加參數(shù)的時(shí)候。
而且最叫人頭疼的是,DHTML不是w3c規(guī)定的標(biāo)準(zhǔn),于是不同的瀏覽器給出的setInterval參數(shù)表還不一樣。。。
就我測試的兩款瀏覽器來說(IE內(nèi)核,webkit內(nèi)核)
IE:setInvterval(function, msecond [,lang]);
chrome:setInterval(function, msecond [, pram1, pram2, ....]);
也就是說,chrome里面是允許對function添加參數(shù)的,參數(shù)表在最后邊。然而IE最后一個(gè)參數(shù)的作用是標(biāo)明所用的腳本語言種類,因?yàn)镮E除了js還支持vbs等其他的腳本語言。
為了解決兼容性,只好用到無名函數(shù)。。。
function test(yourArg)
{
var arg = yourArg;
setInterval(function(){callback(arg)}, time);
}
首先想到的,是直接用function生成定義完整的類:
復(fù)制代碼 代碼如下:
function myClass(arg,...)
{
this.attributeName;
this.functionName = function(){};
}
不過這樣有一個(gè)問題,每當(dāng)我new一個(gè)新的myClass實(shí)例的時(shí)候,內(nèi)部的function都會(huì)重新開辟空間,返回引用給functionName。但這個(gè)和我們設(shè)想的類不一致,浪費(fèi)空間,而且理論上類的function應(yīng)該是共享的。
更合理的做法,一是在類外定義函數(shù),然后類內(nèi)將函數(shù)指針賦值給functionName,另一種是在類外myClass.prototype.functionName = function(){}。這兩種都是不錯(cuò)的選擇,其中第二個(gè)看起來更接近類的定義。
接下來var newObj = new myClass();大功告成。
關(guān)于js(二)無名函數(shù)
無名函數(shù),其中一個(gè)作用可能是生成新的函數(shù)對象的引用,主要是用于定義。
另一個(gè)用處就是針對js中一些無法含參的回調(diào)函數(shù)而言的。
明顯的例子就是setInterval,我想這是很多人頭疼的一個(gè)函數(shù),尤其是你想在回調(diào)函數(shù)中添加參數(shù)的時(shí)候。
而且最叫人頭疼的是,DHTML不是w3c規(guī)定的標(biāo)準(zhǔn),于是不同的瀏覽器給出的setInterval參數(shù)表還不一樣。。。
就我測試的兩款瀏覽器來說(IE內(nèi)核,webkit內(nèi)核)
IE:setInvterval(function, msecond [,lang]);
chrome:setInterval(function, msecond [, pram1, pram2, ....]);
也就是說,chrome里面是允許對function添加參數(shù)的,參數(shù)表在最后邊。然而IE最后一個(gè)參數(shù)的作用是標(biāo)明所用的腳本語言種類,因?yàn)镮E除了js還支持vbs等其他的腳本語言。
為了解決兼容性,只好用到無名函數(shù)。。。
復(fù)制代碼 代碼如下:
function test(yourArg)
{
var arg = yourArg;
setInterval(function(){callback(arg)}, time);
}
相關(guān)文章
javascript面向?qū)ο笕腴T基礎(chǔ)詳細(xì)介紹
本文章介紹了js中常用的對象包括有JavaScript對象簡介 字符串對象 date() 數(shù)組 數(shù)學(xué)對象 函數(shù)對象 應(yīng)用介紹,有需要了解的同學(xué)可參考一下2012-09-09
javascript 面向?qū)ο蟮腏avaScript類
這一節(jié)來說下緊接著的一個(gè)概念——類。雖然JavaScript中沒有class關(guān)鍵字,但作為開發(fā)人員我們一定要有這個(gè)思想。在C#中類可以分為實(shí)例類和靜態(tài)類,JavaScript亦然。2010-05-05
改變javascript函數(shù)內(nèi)部this指針指向的三種方法
javascript 的this 值,真的是非常的莫名奇妙。我一直被搞的很頭暈,也許正是這個(gè)this,讓大多數(shù)人感覺js 非常的莫名其妙。2010-04-04
js創(chuàng)建對象的幾種常用方式小結(jié)(推薦)
最近在看javascript高級程序設(shè)計(jì),其中對對象的創(chuàng)建做了具體的闡述,綜合起來,總結(jié)了下(je知識庫javascript專欄由這方面的教程,有興趣的可以去知識庫看看)2010-10-10
JavaScript 設(shè)計(jì)模式 安全沙箱模式
沙箱模式常見于YUI3 core,它是一種采用同一構(gòu)造器(Constructor)生成彼此獨(dú)立且互不干擾(self-contained)的實(shí)例對象,而從避免污染全局對象的方法2010-09-09

