質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

6161閲覧

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

kkkke

総合スコア12

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2016/11/05 00:36

編集2016/11/05 00:39

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

仕様書には"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/05 01:11

編集2016/11/06 04:54
raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kkkke

2016/11/05 01:51

ありがとうございます!!
think49

2016/11/05 05:21

件の「ネイティブ関数」の発言者です。 https://teratail.com/questions/53857 厳密には造語というのはその通りでES3における「ネイティブオブジェクト(native object)かつ [[Call]] を持つもの」をネイティブ関数と称しました。 回りくどい表現なので「ネイティブ関数」と書きましたが、かえって分かりづらい名前となってしまったようです。以後、気をつけます。 http://www2u.biglobe.ne.jp/~oz-07ams/2002/ecma262r3/4_Overview.html#section-4.3.6 ES5からnative objectの用語はなくなり、別の用語に置き換わっていますが、どう変わったかまでは追い切れていません。 ordinary object, exotic object, standard object のいずれかとあたりをつけていますが…。 http://www.ecma-international.org/ecma-262/7.0/#sec-terms-and-definitions
think49

2016/11/05 10:13

何か勘違いされている気がしますが、ビルトインオブジェクト(ES3/ES5/ES7)とネイティブオブジェクト(ES3)は別物です。 MDNの事例でもES規定のオブジェクトしか存在せず、DOMオブジェクトは一つもないですよね。 ビルトインオブジェクトの定義は今も昔も変わりません。
kkkke

2016/11/05 10:23

http://www.ecma-international.org/ecma-262/5.1/#sec-4.3.6 こちらで下記のように理解したのですがあっていますか?? =========================================== 【native object】 ホスト環境によるというよりJavaScript仕様書で十分に定義されたECMAScript実装内のオブジェクト 標準ネイティブオブジェクトは仕様書で定義されている。 多くのネイティブオブジェクトはbuild-in 他のものはECMAScriptプログラムの実行の過程の間で構成されたもの。 =========================================== 【built-in object(特に重要なnativeオブジェクト/組み込みオブジェクト)】 ECMAScript実装によって提供されたObjectで、ホストオブジェクトから独立している ECMAScriptプログラムの実行時に贈られている Object、Function、Boolean、String、等のnativeオブジェクトが代表的なbuild-inオブジェクト ほとんどのbuild-inオブジェクトはfunctionでcallできる ===========================================
raccy

2016/11/06 05:04

ES7で調べたことを補足で追記しました。ES6以降は"native object"という用語が削除されているので、参考程度で見てください。
raccy

2016/11/06 08:42

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

2016/11/06 23:42 編集

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 型を判定するうまい方法が用意されてくれる事を期待してました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問