言葉で説明するのが難しいのですが、getterのメソッド呼び出しで引数に渡る値をgetterの中で返却する別の関数に渡したいです。
以下は実際のコードをだいぶ簡略したりしているのでだいぶ意味不明なコードになっていると思いますが、お付き合い頂けると嬉しいです。
こんなことをしたいけど引数に値をこれでは渡せない
var obj = {}; Object.defineProperty(obj, 'func', { get: function() { const fn = (xxx) => () => { console.log('hi') }; return fn.bind(obj); } }) console.log(obj.func(5)())
この場合、obj.func(5)
としても、この5の値が最終的に返ってくる関数には渡せていません。
引数にはこうすると値が渡せることが分かった
var obj = {}; Object.defineProperty(obj, 'func', { get: function() { return function(...args) { console.log(args); //[5] } } }) console.log(obj.func(5))
getterでメソッド呼び出しする時に引数の値を渡したい場合は、呼び出し元に返す関数の引数に実引数の値が渡ってくるので、それを使えることは分かりました。
これをどうにか出来ないか?
var obj = {}; Object.defineProperty(obj, 'func', { get: function() { const fn = (xxx) => () => { console.log('hi') }; return function(...args) { console.log(args); // 呼び出し元に返したいのはこちらの方 //ここで呼び出し元から渡ってくるargsを`fn = (xxx) => () => {}`の(xxx)に渡すことは出来ないか? return fn.bind(obj); } } }) // 最終的に返ってきているのが関数なのでこうなってしまうし、5も返ってくる関数には渡っていない console.log(obj.func(5)()) // Function
1つ目と2つ目のコードをミックスしたのがこの3番目のコードになるのですが、最終的に返す関数にこれだと呼び出し元から引数に渡した値が渡りません。こういう場合、どうすれば呼び出し元から引数に渡した値を、最終的に返したい関数に渡せるのでしょうか?
実際のコードではObject.defineProperty内でのgetterではなく、ES6 Proxy内でのgetterであったり、generatorを使っているのですが、それらを用いないコードに置き換えても質問に影響しなそうだったので、以上のようなコードになっております。()がやたらと多い理由は単にgenerator式をラップしている関数を使っているためです。
よろしくお願いいたしますm(_ _)m
回答2件
あなたの回答
tips
プレビュー