mozilla
Your Search Results

    call

    This translation is incomplete. Please help translate this article from English.

    Function.prototype.call( thisArg, arg1, ... ) メソッド

    概要

    this の値と、個々にあたえた引数をわたして、関数を呼び出します。

    NOTE: このメソッドは apply() メソッドに似ていますが、呼び出し先関数に渡す引数の指定方法が異なります。 apply() メソッドは、呼び出し先関数に渡す引数のリストを単一の配列として受けとります。
    Method of Function
    Implemented in JavaScript 1.3
    ECMAScript Edition ECMAScript 3rd Edition

    構文

    fun.call(thisArg[, arg1[, arg2[, ...]]])

    引数

    thisArg
    呼び出し先関数 fun の中で this パラメータとして使用される値です。 実際にこの値が関数の中で this の値として使用されるとは限りません: もし、関数が non-strict mode のコードで、nullundefined が指定された場合は this の値は global object になります。 また、プリミティブ値はボクシングされます。
    arg1, arg2, ...
    呼び出し先関数 fun に渡される引数です。

    Description

    呼び出し先関数の中で this として使われるオブジェクトを指定して関数を呼び出します。

    this が何を指すかは、通常、関数の呼び出し形式によって決まります。 例えば obj.testMethod() というメソッド呼び出しの形式で関数を呼び出した場合、この関数の中の this はオブジェクト obj を指します。 あるオブジェクトに属するメソッドを別のオブジェクトのメソッドのように呼び出したい (すなわち、メソッド中の this キーワードの参照先オブジェクトを別のオブジェクトにしたい) とき、call メソッドを使えば、わざわざ別のオブジェクトのプロパティにそのメソッドを代入せずとも済みます。 例えば、obj.testMethod というメソッドを otherObj のメソッドのように呼び出したいときは、obj.testMethod.call( otherObj ) とすればよいです。

    Examples

    コンストラクタを連鎖させるために call メソッドを使用する

    コンストラクタを用いてオブジェクトを生成する際に、call を用いることで Java のようにコンストラクタによる初期化を連鎖させることができます。 下の例では、Product コンストラクタは 2 つの引数 namevalue をとるように定義されています。 FoodToy は、call メソッドを使用して Product 内での this の値が自身の中での this の値と同じになるように Product コンストラクタを呼び出しています。 その際、引数として namevalue を渡しています。 Productname プロパティと price プロパティを初期化し、特殊化されたコンストラクタである FoodToy はどちらも category プロパティを初期化します。

    function Product(name, price) {
      this.name = name;
      this.price = price;
    
      if (price < 0)
        throw RangeError('Cannot create product "' + name + '" with a negative price');
      return this;
    }
    
    function Food(name, price) {
      Product.call(this, name, price);
      this.category = 'food';
    }
    Food.prototype = new Product();
    
    function Toy(name, price) {
      Product.call(this, name, price);
      this.category = 'toy';
    }
    Toy.prototype = new Product();
    
    var cheese = new Food('feta', 5);
    var fun = new Toy('robot', 40);
    

    無名関数の呼び出しに call メソッドを使用する

    次の例では、無名関数に対して call メソッドを呼び出すことで、この無名関数があたかも配列中のそれぞれのオブジェクトのメソッドであるかのように振舞わせています。 ここで無名関数を使用する主な目的は、無名関数の中でさらに関数オブジェクト (すなわちクロージャ) を生成し、その関数オブジェクトが配列中の正しいインデックス番号を保持するようにすることです。 無名関数の中で生成された関数オブジェクトは、配列中のオブジェクトのメソッドになります。 ここで 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); 
        } 
      }).call(animals[i], i);
    }
    

    See Also

    apply

    ドキュメントのタグと貢献者

    タグ: 
    Contributors to this page: nobuoka, ethertank, siokoshou
    最終更新者: siokoshou,