Consideriamo Ho il seguente codicefunzioni confezionamento e function.length
/*...*/
var _fun = fun;
fun = function() {
/*...*/
_fun.apply(this, arguments);
}
ho appena perso i dati sulla .length
_fun
perché ho cercato di avvolgerlo con una logica di intercettazione.
La seguente non funziona
var f = function(a,b) { };
console.log(f.length); // 2
f.length = 4;
console.log(f.length); // 2
Il annotated ES5.1 specification states che .length
è definito come segue
Object.defineProperty(fun, "length", {
value: /*...*/,
writable: false,
configurable: false,
enumerable: false
}
Dato che la logica interna fun
richiede .length
per essere precisi, come posso intercettare e sovrascrivere questa funzione senza distruggere i dati .length
?
Ho la sensazione che avrò bisogno di usare eval
e il dodgy Function.prototype.toString
per costruire una nuova stringa con lo stesso numero di argomenti. Voglio evitare questo.
Hai davvero bisogno che la lunghezza sia impostata correttamente? Si consiglia di dare un'occhiata a https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind, anche molte librerie simulano questo comportamento. – Prusse
@Prusse come si risolve il problema? – Raynos
solo un suggerimento, non può capire chiaramente il tuo obiettivo, mi dispiace. – Prusse