2012-05-07 41 views
7

JavaScript中似乎有幾個不同的「功能類似的組」。這裏是我虛構的名字爲他們:不同類型功能的術語

  • 「常規功能」:這是調用與括號,並用new。大部分功能屬於這一類。

  • 「構造,唯一的功能」:這是可調用的,只有new。例如,Image,DOMParser

  • 「非構造函數」:這些可以用parens調用,但不能用new調用。例如,Math.round,Function.prototype

  • 「不可贖回功能」:這些功能是不是在所有可調用。例如,window.constructorDocumentNodeList

什麼是功能不同羣體適當的名稱?


我也想弄清楚,如果這「羣」的功能是可以根據其[[Prototype]]__proto__)屬性是否被設置爲Function.prototype確定。

  • 最「常規功能」將有Function.prototype,但它可以使用非標準__proto__被刪除。

  • 最 「唯一的構造函數」 有Object.prototype。我找不到任何他們有Function.prototype(so,no callapply)的情況。這總是這種情況/ spec'd行爲?

  • 「非構造函數」似乎主要有Function.prototype,但Function.prototype本身除外。是否有其他的情況有Object.prototype

  • 「不可贖回功能」似乎總是有Object.prototype。是這樣嗎?


我會到一些答案在這裏回答:

常規功能:function
構造:constructor
非構造:method
不可贖回:interface

這不是我正在尋找的東西。 「函數」和「構造函數」當然是正確的,但我正在尋找更具體的東西(「非構造函數」等)。

「法」並不比「功能」在告訴你它不能與new被稱爲好,constructor沒有得到跨越,它可以new調用點。

在許多情況下,只能從主機對象的constructor屬性訪問不可調用函數。我認爲大多數這些將比「接口」更準確地稱爲「構造函數」。


[東西有關主機對象VS本地對象]

這有點在正確的軌道上。考慮到this question(以及接受的答案及其評論),對於用戶定義的函數是主機還是本機對象似乎存在一些分歧或混淆。

爲了避免這種情況,我們只需調用用戶定義的函數UDF,而不用擔心它們是主機還是本機。所以我們有UDF,主機對象和本地對象。

  • 「正則函數」

    • 每UDF

    • 原生對象像ObjectString

    • 主機對象像window.toString(在Chrome 18測試)。

  • 「構造,唯一的功能」

    • 沒有本地對象?

    • 主機對象如DOMParser,Image

  • 「非構造函數」

    • Math.roundFunction.prototype本地對象。

    • 主機對象如DOMParser#parseFromString

  • 「不可贖回功能」

    • 沒有本地對象?

    • 主機對象如NodeList,DocumentFragment

所以看起來有可能是主機對象和構造只/不可贖回功能之間的連接,但主機VS本土似乎並不適用於非構造和定期的功能。

+0

一個較低的水平。你和你的術語問題又來了!:) – BoltClock

+0

嘿,它已經這個時候困擾我好幾天。我不知道如果我只是做了人工分類目錄那裏有沒有,但我想稱之爲*東西* –

+1

[這裏](https://developer.mozilla.org/en/Introduction_to_Object-Oriented_JavaScript)是一個很好的介紹面向對象的JavaScr ipt,它應該回答你的問題。 – sp00m

回答

0

我不認爲有一個爲你問一個正式的命名,但通常這是人們如何調用所有這些功能在任何編程語言:

  • 常規功能:function
  • 構造函數: constructor
  • 非構造:method
  • 非調用的:interface(在JS的情況下,這是指原生對象在較低的電平)
1

我想這裏提到的是在EcmaScript中創建的本地對象和由開發人員創建並提供的對象之間的細微差別。

對主機對象的「規則函數」映射,也就是說使用JS和「僅構造函數的函數」,「非構造函數」和「不可調用函數」創建的函數映射到語言中內置的本地對象在

http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

相關問題