コンテンツにスキップ

JavaScript/Function

出典: フリー教科書『ウィキブックス(Wikibooks)』
JavaScript > Functionオブジェクト

Functionオブジェクト

[編集]

プロパティ

[編集]

Function.length

[編集]

この関数が取る引数の数を返す。

function foo(a,b,c){ return; } 
console.log( foo.length );	// 3が表示される。

指定されている引数が3つであるからいって、引数が3つである必要は無い。

function foo(a, b, c) { 
 if (a === void 0) a = 2;
 if (b === void 0) b = 3;
 if (c === void 0) c = 5;
 return `a: ${a}, b: ${b}, c:${c}`; 
} 
console.log( foo() );	  // a: 2, b: 3, c:5
console.log( foo(6) );	  // a: 6, b: 3, c:5
console.log( foo(8,2) );  // a: 8, b: 2, c:5
console.log( foo(1,2,3) );// a: 1, b: 2, c:3

省略された引数には undefind が入る。ここでは void 0 と比較して省略を判断している。

引数の省略の処理は、ES6 以降は次のように書くことも出来る。

function foo(a = 2, b = 3, c = 5) { 
 return `a: ${a}, b: ${b}, c:${c}`; 
} 
console.log( foo() );	  // a: 2, b: 3, c:5
console.log( foo(6) );	  // a: 6, b: 3, c:5
console.log( foo(8,2) );  // a: 8, b: 2, c:5
console.log( foo(1,2,3) );// a: 1, b: 2, c:3

Function.name

[編集]

この関数の名前を返す。

function foo(a,b,c){ return; } 
console.log( foo.name );	// fooが表示される。
const bar = function(a,b,c){ return; } 
console.log( bar.name );	// barが表示される。
let baz = function(a,b,c){ return; } 
console.log( baz.name );	// bazが表示される。

関数定義だけでなく、関数式でも左辺値の変数の名前が入る。

Function.prototype

[編集]

インスタンスメソッド

[編集]
メソッド 解説
Function.prototype.apply() 指定された this 値と配列(または配列風オブジェクト)として提供された引数で関数を呼び出します。
Function.prototype.bind() 呼び出されたときに指定された this 値を持つ新しい関数を生成します。
Function.prototype.call() 指定された this 値と個別に提供された引数で関数を呼び出します。
Function.prototype.constructor() 関数オブジェクトを作成した Function コンストラクターへの参照を返します。
Function.prototype.toString() 関数を表す文字列を返します。

Function.prototype.apply(thisArg, argArray)

[編集]

callメソッドと同じく、メソッドを実行できる。 callメソッドとの違いは、引数に配列を与えると、これを展開して実行することである。

例えば、次の様に配列を自動で展開して実行可能である。

Math.max.apply( null, [1,5,8,9,2,10,30,5] );

スプレッド構文を使うとこのようにも書ける。

Math.max(...[1,5,8,9,2,10,30,5]);

Function.prototype.arguments

[編集]

Function.prototype.bind

[編集]

Function.prototype.call(thisArg [ , arg1 [ , arg2, … ] ] )

[編集]

callはその関数を実行する。 また、関数に引数を与えたい場合には、callメソッドの第2引数以降に指定をする。 つまりは次の2文は等価である。

console.log( a("Hello") );
console.log( a.call( null, "Hello") );

callメソッドの存在意義は、第1引数があり、ここで親オブジェクトを指定可能である所である。 そのため、thisを一時的に上書きする等の使用法がある。

function foo(){
  this.x=10;
  (function(){
    console.log( this.x ); // 10が表示
  }).call(this);
}

Function.prototype.caller

[編集]

Function.prototype.constructor

[編集]

Function.prototype.length

[編集]

Function.prototype.name

[編集]

Function.prototype.toString

[編集]

関数の処理内容を文字列で返す。

下位階層のページ

[編集]

脚註

[編集]


外部リンク

[編集]

附録

[編集]

静的プロパティ

[編集]
Function.length
Function.name

静的アクセサ

[編集]

静的メソッド

[編集]
Function.prototype()

継承関係

[編集]

Functionのインスタンスプロパティ

[編集]
Function.prototype.arguments
Function.prototype.caller
Function.prototype.length
Function.prototype.name
Function.prototype.prototype

Functionのインスタンスアクセサ

[編集]

Functionのインスタンスメソッド

[編集]

Functionのインスタンスプロパティ

[編集]
Function.prototype.length
Function.prototype.name

Functionのインスタンスアクセサ

[編集]
get Function.prototype.arguments
get Function.prototype.caller

Functionのインスタンスメソッド

[編集]
Function.prototype.apply()
Function.prototype.bind()
Function.prototype.call()
Function.prototype.constructor()
Function.prototype.toString()
Function.prototype [ Symbol.hasInstance ] ()

Objectのインスタンスプロパティ

[編集]

Objectのインスタンスアクセサ

[編集]
get Object.prototype.__proto__

Objectのインスタンスメソッド

[編集]
Object.prototype.__defineGetter__()
Object.prototype.__defineSetter__()
Object.prototype.__lookupGetter__()
Object.prototype.__lookupSetter__()
Object.prototype.constructor()
Object.prototype.hasOwnProperty()
Object.prototype.isPrototypeOf()
Object.prototype.propertyIsEnumerable()
Object.prototype.toLocaleString()
Object.prototype.toString()
Object.prototype.valueOf()