首頁  >  文章  >  web前端  >  如何定義javascript物件導向中的類別?

如何定義javascript物件導向中的類別?

伊谢尔伦
伊谢尔伦原創
2017-07-27 13:37:531097瀏覽

大量的使用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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn