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)」
コメントはまだありません。
コメントの投稿
改行と段落タグは自動で挿入されます。メールアドレスは表示されません。
利用可能な HTML タグ :
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite="">
<cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>