RSS | Twitter | Facebook
Home » Javascript » JavaScriptの関数 : JavaScript

JavaScriptの関数 : JavaScript

JavaScriptにおける関数はオブジェクトであり、関数定義は「オブジェクトの作成」に他ならない

出典 JavaScriptのオブジェクトとは:ちゃんと理解してますか

関数はオブジェクトなので後からプロパティを追加したり、変数に代入したりできる。

関数定義

var hoge = function() { alert('Hello! World"); }; // --- (1)
function hoge() { alert('test'); } // --- (2)

(1)と(2)は殆ど同じ。(2)は関数を定義してhogeという変数に代入処理を同時に行う。

(1)と(2)の違い

  • (2)は関数をどこで定義してもスコープの一番先頭に移動される。co

関数とprototype,cunstructor

function hoge() { alert('test') };
console.log(hoge.constructor); // --- (1)
console.log(hoge.prototype); // --- (2)
console.log(hoge.prototype.constructor); // ---(3)

----- 実行結果 -----
Function()
Object {}
hoge()

var hoge = function() { alert('test') };

console.log(hoge.constructor); // --- (1)
console.log(hoge.prototype); // --- (2)
console.log(hoge.prototype.constructor); // ---(3)

----- 実行結果 -----
Function()
Object {}
function()

関数の呼び出し

呼び出しはドット演算子を使っても[]を使っても呼び出せる。


window.func();
window['func']();

関数とthis

関数を呼び出すとパラメーターのほかにthisとargumentsというパラメータが自動的に渡される。
関数がメソッドの場合、thisはメソッドが定義されているオブジェクト。メソッドではなく関数としてよびだした場合はthisはブローばルオブジェクト。

var o = {
    name : "Findxfine",
    m : function(){
            alert(this); // メソッドが定義されているオブジェクト o = { }を表示
            var f = function(){
                alert(this); // グローバルオブジェクトであるwindowオブジェクトを表示
            }
            f();
     }
}
o.m();

関数の拡張

JavaScriptの関数はオブジェクトでありプロトタイプチェーンにより、すべての関数はFunction.prototypeにリンクしている。
Function.prototypeを拡張することにより、すべてのメソッドで利用できるメソッドを追加できる。
出典:[Douglas Crockford著 『JavaScript: The Good Parts』(オライリー・ジャパン ,発行2008)」

Function.prototype.method = function(name, func) {
	if (!this.prototype[name]) {
		this.prototype[name] = func;
		return this;
	}
};
Numberに整数部分を取り出すメソッドintegerを追加
Number.method(’integer’, function() {
	return Math[this < 0 ? 'ceil' : 'floor'](this);
});
document.writeln((-10 / 3).integer()); // -3

出典:[Douglas Crockford著 『JavaScript: The Good Parts』(オライリー・ジャパン ,発行2008)」

このページの上へ移動

  Yahoo!ブックマークに登録    Google  この記事をクリップ!  BuzzurlにブックマークBuzzurlにブックマーク

2009/9/13 日 | Javascript, grammar | 固定リンク |

コメントはまだありません。

コメントの投稿

改行と段落タグは自動で挿入されます。メールアドレスは表示されません。
利用可能な HTML タグ :
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite="">
<cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

(必須)

(必須)


トラックバックURL

このページの上へ移動