4
1)我有以下代碼:問題Array.prototype.slice.appy(參數1)
var callIt = function(fn) { return fn.apply(this, Array.prototype.slice.apply(arguments, 1)); };
時CALLIT被調用的NodeJS,它抱怨:
return fn.apply(this, Array.prototype.slice.apply(arguments, 1));
^
TypeError: Function.prototype.apply: Arguments list has wrong type
2)如果我改變CALLIT到:
var callIt = function(fn) { return fn.apply(this, Array.prototype.slice.apply(arguments)); };
的NodeJS不抱怨,但結果不是我們所期望的,在通過額外的第一個參數
3)如果我改變CALLIT到:
var callIt = function(fn) { var args = Array.prototype.slice.apply(arguments); return Function.prototype.apply(fn, args.slice(1)); //return fn.apply(this, args.slice(1)); //same as above };
它按預期工作。
4)如果我像這樣運行在Chrome開發者工具控制檯測試:
> var o={0:"a", 1:"asdf"} undefined > o Object 0: "a" 1: "asdf" __proto__: Object > Array.prototype.slice.call(o,1) [] > Array.prototype.slice.call(o) []
現在片不能在陣列狀物體的工作。
我對這些感到困惑。請解釋。
我引用如下: Array_generic_methods
謝謝大家。我是JavaScript的新手,並試圖最近在JavaScript上測試嚴重的部分。 – 2013-02-14 08:53:10