JavaScriptはthisポインタを修正します.

1290 ワード

テーマ
パッケージ関数fは、fのthisを指定されたオブジェクトに向ける.
入力例
bindThis(function(a, b) {
    return this.test + a + b;
}, {test: 1})(2, 3);
出力例
6
分析
このテーマの要求は、一つの関数bindThisをカプセル化することです.この関数は二つのパラメータがあります.一つのパラメータは一つの内部にthisポインタを使用する関数fがあります.二つ目のパラメータは一つのオブジェクトobjです.bindThisを実行した後、一つの関数を返します.
function f(a, b) {
    return this.test + a + b;
}

function bindThis(f, obj) {
    //      
}

//    
var a = bindThis(f,{test:1});
a(2,3);
解決方法
javascriptの三剣士:bind apply call
1、解決方法一:bind()を使う
function f(a, b) {
    return this.test + a + b;
}

function bindThis(f, obj) {
    //      
    return f.bind(obj);
}

//    
var a = bindThis(f,{test:1});
console.log(a(2,3));
console.log(f(2,3));
6
NaN
2、解決方法2:appyを使う()
function bindThis(f, obj) {
    //      
    return function () {
        return f.apply(obj, arguments);
    };
}
3、解決方法3:コールを使う()
function bindThis(f, obj) {
    //      
    return function (a,b) {
        return f.call(obj, a,b);
    };
}
callとappyの基本的な違い:パラメータが違います.2つのパラメータをapply()で受信し、1つ目は結合thisの値で、2番目はパラメータ配列である.call()は、最初のパラメータもthisの値にバインドされていますが、後者は一定のパラメータではなく、配列ではなく、つまり、通常の関数への参照のように、これらのパラメータを一つずつ渡すことができます.