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

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

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

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

Q&A

解決済

1回答

2568閲覧

Function.prototypeを何もしない関数として使っても問題ないですか?

f_acid

総合スコア56

JavaScript

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

0グッド

0クリップ

投稿2015/07/01 08:02

lang

1function include(src, callback){ 2 if(typeof callback!="function")callback = Function.prototype; 3 var e = document.createElement("script"), s = document.scripts[0]; 4 e.type = "text/javascript"; 5 e.src = src; 6 e.addEventListener("load", callback); 7 s.parentNode.insertBefore(e, s); 8}

callbackが関数ならe.addEventListener("load", callback)
関数でなければe.addEventListener("load", Function.prototype)しています。
この書き方に問題はありますか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

https://people.mozilla.org/~jorendorff/es6-draft.html#sec-properties-of-the-function-prototype-object
http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf
非公式和訳
(追記: 出典が不適当 (1行目: ECMAScript 6の草案) でした。2行目に追記したECMAScript 3仕様を参照してください。章番号の "15.3.4" で文書内検索してください。)

これを読む限り、そのような使い方に限っては問題ないようです。
要訳: Function.prototype は組み込みの関数で、引数によらず undefined を返す。コンストラクターには使用できない。
(追記: 6の訳です。3ではコンストラクターに使用可能か言及されていないような気がしますが、Chrome ではすでにエラーとなるため使用できないと思ったほうがいいでしょう。)

ということで以下の違いにご注意ください。

var funcA = function(){};
var funcB = Function.prototype;

new funcA();// 空のオブジェクトを生成
new funcB();// TypeError

ちなみにもし jQuery をお使いなら、このような時のために $.noop が用意されています。(コンストラクターにも使えます。)

投稿2015/07/21 04:50

編集2015/07/21 05:14
tozjp

総合スコア790

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問