私は以下の関数を定義しています。console.log(this)
を元の配列[3,4,5]に戻したいと思います。ただし、ウィンドウオブジェクトを返します。私は適用とバインドを使用しようとしましたが、うまくいきませんでした。グローバル関数でこのキーワードに特定のオブジェクトをバインドする方法はありますか?
申し訳ありませんが、私はJavascriptを初めて使用しています。ありがとうございます!
function Filterstuff(arr) {
var currentArray = arr;
return (function arrayFilterer(predicate,callback) {
if(typeof predicate != "function")
return currentArray;
currentArray = currentArray.filter(predicate);
callback.apply(arr,currentArray); // call back apply
if(typeof callback == "function")
callback(currentArray);
return arrayFilterer;
});
}
var arrayFilterer = Filterstuff([3,4,5]);
arrayFilterer(function (elem) {
return elem !== 4;
}, function (currentArray) {
console.log(this);
console.log(currentArray);
});
結果:ラウンド1にconsole.log(これは)元の配列を返しますが、ラウンド2には、ウィンドウには、はい、apply
が働くだろう再び
なぜ 'this'はそのコンテキストで配列になるのですか?なぜあなたはそれを望んでいますか? – adeneo
また、列挙可能なプロパティをそのような 'Array.prototype'に追加することは非常に悪い考えです。 'Array.prototype'を拡張したい場合は、' Object.defineProperty'を使用して、列挙できないプロパティを定義してください。 –
何かをバインドする必要のある関数にログを入れないでください – Rajesh