- + JavaScript の質問用スレッド vol.122 + [無断転載禁止]©2ch.net
582 :543 (アウアウウー Sa5f-t+3N)[sage]:2016/12/23(金) 07:21:32.58 ID:VeLH/y/da - >543はES5の範疇でどこまでやれるかやってみた程度のもの
ES6ではspread operatorという答えが出ていたので質問者が自己判断できる範疇と考えていた >>553,579 ES5では無理、ES6ならすでに提案されているようにspread operatorを利用可能 ただし、Function.prototype 上に関数を置くと呼び出し元関数(print)の this 値が変化してしまう Object.defineProperty(Function.prototype, 'spread', { configurable: true, enumerable: false, writable: true, value: function spread (args) { this(...args); } }); var obj = {msg: "hoge", print: function(a,b){console.log(a+this.msg+b);}}; obj.print.spread(["(", ")"]); // (undefined) this 値を渡す方法がないのであなたの要件は実装不可能 素直に呼び出し側で spread operator を使うべき # ちなみに、Object.prototype, Function.prototype を拡張するのがデメリットを享受したうえで使うなら止めようとは思わない # 俺は拡張しようとは思わないが、デメリットを承知の上で使う事情があるならそれもまた良いだろう(勿論、チーム内で合意を取る必要はある)
| - + JavaScript の質問用スレッド vol.122 + [無断転載禁止]©2ch.net
583 :543 (アウアウウー Sa5f-t+3N)[sage]:2016/12/23(金) 07:41:04.49 ID:VeLH/y/da - > 素直に呼び出し側で spread operator を使うべき
一応、書いておく var obj = {msg: "hoge", print: function(a,b){console.log(a+this.msg+b);}}; obj.print(...["(", ")"]); // "(hoge)"
|
|