0

JavaScriptでは、次の2つの方法で関数を呼び出すことができます。

function f(message) { ... }
f.call(this, "test");

あるいは単に:

f("test")

最初のケースでスコープを指定できることを除いて、この構文を他の構文よりも使用することに他の利点はありますか?

4

3 に答える 3

4

this必要に応じてオブジェクトを渡すことができます。例えば

[].slice.call("abcdef", 2) === ['c', 'd', 'e', 'f'];

また

var x = {hasOwnProperty:function() { return false; }, key:42};
x.hasOwnProperty('key'); // == false
{}.hasOwnProperty.call(x, 'key'); // true

callこれはキーワードではなく、のメソッドであることに注意してくださいFunction.prototype

読む:

于 2013-03-24T22:30:15.127 に答える
3

最初のケースでスコープを指定できることを除いて

「スコープを指定」することはできません。スコープはコードの記述方法によって設定されます。を使用して、限られた範囲以外で動的に変更することはできませんwith。関数のthisキーワードはスコープとは関係がなく、現在の実行コンテキストでは常にローカル変数として解決されます。

于 2013-03-24T22:42:35.110 に答える
1

部分関数アプリケーションcallに(およびapply)を使用することもできます。これは、いくつかの事前設定された引数を使用して別の関数を呼び出す関数を作成する場合です。例えば:

// Basic add function
function add(a, b) {
    return a + b;
}

// Function to create new adders with a preset 'a' argument
function createAdder(a) {
    return function(b) {
        return add.call(null, a, b);
    }
}

// Let's create a function that always adds five to what's passed in
var addFive = createAdder(5);

// Now let's test it
addFive(6); // 11 - it works!
于 2013-03-25T00:51:22.113 に答える