2016-07-17 4 views
0

私はJavaScriptをES6babelを使用しています。 しかし、私は は最終的に、私はので、私はIE8では、適用メソッドが機能しません

var params = [ level,] 
var concat = Function.prototype.bind.call(params.concat, Array); 
var paramsConcated =concat.apply(params, args) 

const params = [ 
     level, 
    ].concat(...args) 

から置き換えるソリューション

var log = Function.prototype.bind.call(console.log, console); 
log.apply(console, ["this", "is", "a", "test"]); 
このリンクで

console.log.apply not working in IE9

を見つけ動作しないこと適用されます知っていました

しかしそれはouを印刷しましたこういうの

function Array() { ... }, [second arg...], [third arg..] 

常に最初の引数にArray(){...}を表示します。

私は間違いがありますか?

EDIT 1: 出力については言及しませんでした。私はparamsConcatedを[level、args [0]、args [1]、...、args [n]]にしたいと思っています。

EDIT 2: ビルドした後、params.concat(... argsが)concat.apply(params.args)に置き換えられます。 だから、私は3つのドットを使うべきではありません。

+0

してください[編集]あなたの質問コードが行うことになっているものの記述を含むようにします。希望の出力は何ですか? – nnnnnn

+0

IE8で '.apply()' *が動作しないと思っていますが、何がうまくいかないのかを定義しておらず、代わりに解決策だと思いました。元の問題に戻るのはどうですか? '.apply()' *は動作しますが、ES3 +とは異なるES3に従って動作します。 –

+0

'Function.prototype.bind.call(console.log、console)'は 'console.log.bind(console)'とまったく同じです。 'Function.prototype.bind.call(params.concat、Array);'、必要であれば 'params.concat.bind(Array)'とまったく同じです。 –

答えて

1

主な問題は、あなたがbind代わりparamsArrayオブジェクトにconcat()をINGのしていることです。だからこそあなたの出力にfunction Array()を得ているのです。

しかし、あなたがやっていることは不要です。 consoleは、そのメソッドがIEの古いバージョンで.apply()をサポートしない特殊なケースです。配列には問題はありません。

だから、この操作を行います。

var params = [ level,] 
var paramsConcated = params.concat.apply(params, args) 
+0

あなたは私に素晴らしい教訓を与えます –

0

Arraythisという値にバインドしました。それはbindのことです。

なぜ私はbindを試したのか分かりません。 [].concatへの参照が必要なようです。

var params = [ 123 ], 
 
    args = [ [1], 2, [3] ], 
 
    concat = Array.prototype.concat; 
 
console.log(concat.apply(params, args)); // [ 123, 1, 2, 3 ] 
 
console.log(params.concat(...args));  // [ 123, 1, 2, 3 ]

関連する問題