在前面講元語言
的過程中,有些技術細節就忽略了。其中之一,就是這個建立函式的方法。這裡開個小主題來講講。
在js裡面,我們可以用任意方法來構建物件,包括直接量和構造器。在使用構造器時,也可以有基於原型和基於屬性抄寫兩種方法(以及這兩種方法混用)。下面的例子簡要地說明這些物件的構造方法:
---------// 直接量物件宣告
obj =
// 使用基於原型繼承的方法來構造物件
function myobject()
myobject.prototype =
obj = new myobject();
// 使用基於屬性抄寫的方法來構造物件
function myobject2
obj = new myobject2();
---------
物件創生的方法很多也很靈活,而且靈活應用,還能產生更加複雜的技術方法。但作為js另外一半的「函式」,它的創生方法就不那麼方便了。它只有兩種方法:
---------// 宣告函式直接量
function x()
// 建立函式
x = new function();
---------
注意這裡的建立函式,在js中,有且僅有這樣一種語法能「動態地」建立出乙個函式來。然而,如果我們試圖對建立函式的過
簡而言之,我就是想要實現乙個構造器——類似於function。這個構造器能像建立物件一樣,建立出函式了。這與元語言系統之間的關係在於:有了「能建立函式的函式」,就等於有了「元函式」。而「元函式+元資料(元類、元物件、基元型別)」就構成了乙個完整的元語言系統——其中「基元型別」也就是值型別。
那麼,如何構造出乙個函式呢?
---------f = new function(....);
---------
但可能沒幾個人想過,function也可以象下面這樣使用:
------------------
o!居然可以這樣嗎?哈哈,是的。而且,這樣一來,我們可以自由地處理函式的建立引數、以及寫自己的「元函式」。
簡單地說,我們可以這樣寫:
---------function arrayfactory()
x = new arrayfactory();// 得到函式
x = new x(); //<--用作構造器,或作為函式直接執行
---------
我們也可覆蓋系統的function函式,以使得它對引數做一些預處理:
---------void function = function(f)
}(function);
x = new function(..................); // 得到函式
x = new x(); //<--用作構造器,或作為函式直接執行
---------
由於上述性質,我們可以構建任意複雜的「函式+物件」系統。而更深層面的意義在於:「函式+物件」實際上映**「演算法+資料結構」兩個方面的性質,因此,從js的元語言系統開始,我們可以構建任意複雜的語言,或者任意複雜的執行系統。
JS 語言基礎
兩個變數 相加 var s 今天下雨了 var i 10 alert i s 這裡的i s是拼接的意思 顯示出來是 今天下雨了10 假設我改 s 20 這裡的i s還是拼接的意思 因為s 20 帶引號 還是字串型別 轉換型別 parse 資料型別 我要把i和是數字想數字運算 那麼 要把s的型別轉換成...
初學Qt之 在Qt中呼叫外部C語言模組
呼叫外部已編譯好的c語言模組,傳遞引數並將結果返回列印出來。c語言模組 cpp view plain copy print?test.c 用gcc編譯後生產那個的可執行檔案test放在.invokec c 目錄下 include int main int argc,char argv test.c ...
js基礎中的基礎
昨天看了下js很基礎的東西,這裡大致做了點筆記,想if判斷和迴圈這些就沒有記筆記了,因為感覺都是差不多的。在js中宣告變數和變數的宣告週期 在js中宣告在函式外的變數是全域性變數,也就是在整個程式裡有效,而在函式中宣告的變數是區域性變數,只在此函式中有效,但是還是有一點要注意的就是如果在函式中宣告變...