【发布时间】:2011-11-11 15:50:15
【问题描述】:
假设我有以下代码
/*...*/
var _fun = fun;
fun = function() {
/*...*/
_fun.apply(this, arguments);
}
我刚刚丢失了_fun 上的.length 数据,因为我试图用一些拦截逻辑来包装它。
以下不起作用
var f = function(a,b) { };
console.log(f.length); // 2
f.length = 4;
console.log(f.length); // 2
.length的annotated ES5.1 specification states定义如下
Object.defineProperty(fun, "length", {
value: /*...*/,
writable: false,
configurable: false,
enumerable: false
}
鉴于fun 内部的逻辑要求.length 是准确的,如何在不破坏.length 数据的情况下拦截和覆盖该函数?
我觉得我需要使用eval 和狡猾的Function.prototype.toString 来构造一个具有相同数量参数的新字符串。我想避免这种情况。
【问题讨论】:
-
您真的需要正确设置
length吗?你可能想看看developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…,许多库也模拟了这种行为。 -
@Prusse bind 如何解决我的问题?
-
只是一个建议,不能清楚你的目的,抱歉。
标签: javascript function overwrite interception