JavaScriptにおけるネイティブ関数とはなんですか??

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,984

kkkke

score 10

JavaScriptにおけるネイティブ関数とはなんですか??
どこのオブジェクトがもつ関数なのか教えてほしいです。

自分なりに調べた結果、JavaScript仕様の組み込みオブジェクトがもつ関数だと思ったのですが、ブラウザのホストオフジェクトがもつ関数という話も確か聞いたことがあります。

ネイティブオブジェクトは仕様からわかるのですが(仕様NativeObject)、このオブジェクトがもつ関数ということではないのですか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2016/11/05 23:41

    こちらの質問が他のユーザから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 1

checkベストアンサー

+3

仕様書には"native function"なる言葉がないですので、誰かが作った造語だと思われます。たぶん、built-in function(組み込み関数)のことを指して言いたかったのではないでしょうか?


【補足】

最新であるES7の仕様書を改めて確認してみました。(ES5以下とは一部使っている用語が異なるので注意)

以下、ECMAScript® 2016 Language Specification#4.3Terms and Definitionsに記載の用語と定義について私訳です。

4.3.6 ordinary object 一般オブジェクト
全てのオブジェクトがサポートしなければならない基本的な内部メソッドについて、通常の振る舞いを行うオブジェクト

4.3.7 exotic object 異質オブジェクト
基本的な内部メソッドのいくつかについて、通常の振る舞いを行わないオブジェクト

備考: 一般オブジェクトではないあらゆるオブジェクトは異質オブジェクトである。

4.3.8 standard object 標準オブジェクト
この仕様書で定義された意味となるオブジェクト

4.3.9 built-in object 組込オブジェクト
ECMAScript実装により規定および定義されるオブジェクト

備考: 標準組込オブジェクトはこの仕様書で定義される。ECMAScript実装は追加で組込オブジェクトを規定および提供する事ができる。組込コンストラクタはコンストラクタでもある組込オブジェクトである。

4.3.29 built-in function 組込関数
関数である組込オブジェクト

備考: 組込関数の例としてparseIntMath.expが上げられる。ある実装は、この仕様書では定義されていない実装依存の組込関数を提供することができる。

一般オブジェクト異質オブジェクトは対立する関係にあります。その枠組みとは別で、標準オブジェクト組込オブジェクトが存在します。ECMAScript仕様書で定義されているのは標準組込オブジェクト(標準オブジェクト∩組込オブジェクト)になり、それ以外にECMAScript実装は非標準組込オブジェクト(¬標準オブジェクト∩組込オブジェクト)を持つこともできるとされています。

組込コンストラクタ、組込関数と言った用語はコンストラクタ、関数でもある組込オブジェクトとなっていますので、組込コンストラクタ⊂組込オブジェクト、組込関数⊂組込オブジェクト、という関係のようです。

このことから、次のような関係になるかと思います。

  • Array.isArray()は標準組込関数
  • jQuery.isArray()は標準組込関数
  • document.getElementById()は標準組込関数
  • jQuery()は標準組込関数

なお、異質オブジェクトの例にはArrayオブジェクトがあります。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/06 17:27

    To:raccy さん
    勉強になります。
    標準/非標準の分類が気になりましたが、typeof演算子で両者を区別することは不可能なようですね…。非標準異質オブジェクトだけ特別扱いしているようです。
    http://www.ecma-international.org/ecma-262/7.0/#sec-typeof-operator

    キャンセル

  • 2016/11/06 17:42

    異質(exoticの訳として当てけど、うまく表現できていると思う…)オブジェクトはかなり特殊な扱いって感じみたいです。それこそエキゾチックなやつなんです…だからtypeofの扱いもエキゾチックなんでしょう!

    キャンセル

  • 2016/11/07 08:40 編集

    To: raccy さん
    IE8- の JScript には typeof 演算子の返り値に "unknown" がありまして、それが異質(exotic)に該当しますね。
    https://msdn.microsoft.com/ja-jp/library/d70y8358.aspx

    console.log(typeof new ActiveXObject('Excel.Sheet')); "unknown"

    一応、これも立派な Object 型ですが、配慮されたコードをあまり見ません。
    私が typeof arg === 'object' を敬遠して Object(arg) === arg を使用する理由で、ES7 で Object 型を判定するうまい方法が用意されてくれる事を期待してました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る