arr = ["a","b"]
var func = Array.prototype.join.call
var result = func(arr, "+")
console.log(result)
在chrome浏览器下
返回的结果 Uncaught TypeError: undefined is not a function
但是console.log(typeof func);
返回的结果 function
**我的疑惑: 这样的现象应是 call 引起的 ,我想知道为什么call会导致这样?**
内容出自 JavaScript权威指南P163 (内容有改动)
Array.join = Array.join || function(a,sep) {
return Array.prototype.join.call(a,sep);
}
不吝赐教
http://.com/q/1010000000585634
见这里,我之前理解也是有错误的。
当你把 call
方法借过来(赋值给 func), 然后单独调用它的时候, 是会丢些内容的.
下面的例子, 如果你能理解为什么的话, 那你应该可以解理上面的那个为什么出错了.
这里的出错信息, 并不是表示 func
是未定义的, 而是由你借过来的call
这个方法的内部实现上,
在某行代码中要用到某个方法, 而因为丢失了 上下文
, 所以导致没有那个方法, 从而抛出的错误.
又因是内部实现的, 所以抛不出来具体是哪行,哪个方法调用时出错的 =,=