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

伊谢尔伦
發布: 2017-07-27 13:37:53
原創
1048 人瀏覽過

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

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!