无意间写到了些javascript代码,遇到了不明白的地方,求解释:
var a = [2,3,3,1,7,5];
var b = [2,3,3,1,7,5];
var fn = Array.prototype.sort;
fn.call(a);
这里可以成功处理数组a;
但是,如果这样用:
var fn1 = Array.prototype.sort.call;
fn1(b);
这里就报错了。
undefined is not a function
指的是什么?
fn1 //可以输出 function call(){[native code]}
我写一下
Function.prototype.call
的伪代码好了题主做了
fn = xxx.call
之后(其实原型链结算后等价于fn = Function.prototype.call
),call内部拿到的所谓“targetFn”相当于丢失了。也就是fn虽然存在,但执行进入fn的"Native Code"中的时候拿不到要实际执行的函数了,参考ECMA规范中Function.prototype.call的第一步所以这个错误抛出是符合规范的
我再写几个例子看看能不能加深一下理解。其实这事的本质就是
Function.prototype.call
本身也是一个function,得按照javascript的function的所有规矩来办