JavaScriptのcall関数の詳細な使い方
33562 ワード
call()
方法は、指定されたthis
値と、それぞれ提供されるパラメータ(パラメータのリスト)とを有する関数を呼び出す.注意:この方法の役割と
apply()
方法は同様であり、call()
方法によって許容されるのはいくつかのパラメータのリストであり、apply()
方法によって許容されるのは複数のパラメータを含む配列である.構文
fun.call(thisArg, arg1, arg2, ...)
パラメータthisArg
はい、fun
関数運転時に指定されたthis
値.注意したいのは、指定された
this
値は必ずしもこの関数が実行された時のものではない.this
値は、この関数が非厳密モードである場合には、null
とundefined
のthis
値は自動的にグローバルオブジェクト(ブラウザではwindowオブジェクト)を指し、同時に元の値(数字、文字列、ブール値)のthis
は、元の値の自動包装オブジェクトを指す.arg1, arg2, ...
指定されたパラメータのリストです.戻り値
戻り値は、あなたが呼び出した方法の戻り値であり、この方法に戻り値がない場合は
undefined
に戻る.説明
コール中のオブジェクトに、現在のオブジェクトが所有する機能を呼び出しても良いです.callを使って相続を実現できます.次の方法を書いて、他の新しいオブジェクトに引き継がせます.
例
call
方法を使用して父コンストラクタを呼び出します.1つのサブコンストラクタでは、
call
に記載されているように、父コンストラクタのJava
方法を呼び出すことによって継承を実現することができます.次の例では、Food
およびToy
を用いて作成されたオブジェクト例は、Product
のコンストラクタに追加されたname
属性およびprice
属性を有するが、category
属性は、それぞれのコンストラクタに定義されている.function Product(name, price) {
this.name = name;
this.price = price;
if (price < 0) {
throw RangeError(
'Cannot create product ' + this.name + ' with a negative price'
);
}
}
function Food(name, price) {
Product.call(this, name, price);
this.category = 'food';
}
//
function Food(name, price) {
this.name = name;
this.price = price;
if (price < 0) {
throw RangeError(
'Cannot create product ' + this.name + ' with a negative price'
);
}
this.category = 'food';
}
//function Toy
function Toy(name, price) {
Product.call(this, name, price);
this.category = 'toy';
}
var cheese = new Food('feta', 5);
var fun = new Toy('robot', 40);
call
方法を使用して匿名関数を呼び出します.次の例の
for
循環体内では、匿名関数を作成し、次いで、各配列要素を指定されたcall
値としてその匿名関数を起動するthis
方法によって実行した.この匿名関数の主な目的は、各配列要素オブジェクトにprint
方法を追加することであり、このprint
方法は、各要素の配列内の正しいインデックス番号を印刷することができる.もちろん、ここでは、this
値として配列要素をその匿名関数(通常のパラメータであれば良い)に導入する必要がありません.目的はcall
の使用法を実証するためです.var animals = [
{species: 'Lion', name: 'King'},
{species: 'Whale', name: 'Fail'}
];
for (var i = 0; i < animals.length; i++) {
(function (i) {
this.print = function () {
console.log('#' + i + ' ' + this.species + ': ' + this.name);
}
this.print();
}).call(animals[i], i);
}
call
方法を使用して関数を呼び出し、コンテキストの「this」を指定します.以下の例では、
greet
方法を呼び出すと、この方法のthis
値はi
オブジェクトに結び付けられる.function greet() {
var reply = [this.person, 'Is An Awesome', this.role].join(' ');
console.log(reply);
}
var i = {
person: 'Douglas Crockford', role: 'Javascript Developer'
};
greet.call(i); // Douglas Crockford Is An Awesome Javascript Developer