为什么这带代码能运行Array.prototype.join.call("asdf", ",") // a,s,d,f,
join方法不是数组的吗?为什么字符串能调用啊!
为什么这带代码能运行Array.prototype.join.call("asdf", ",") // a,s,d,f,
join方法不是数组的吗?为什么字符串能调用啊!
这个是call的基本用法;
//定义一个add 方法
function add(x, y) {
return x + y;
}
//用call 来调用 add 方法
function myAddCall(x, y) {
//调用 add 方法 的 call 方法
return add.call(this, x, y);
}
10 回答11.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
解决这种问题最好的办法是直接参考ES6官方文档es6 Array.prototype.join。
上图是ES6规范中定义的join函数的执行步骤,下面讲解几个关键步骤:
所以对于
Array.prototype.join.call("asdf", ",")
:上面步骤里面的this对象指的类似于
var a = new String("asdf")
,然后输出a[0] + ',' + a[1] + ',' + a[2] + ',' + a[3]
,也就是"a,s,d,f"
。比如下面这个例子:
再比如下面的例子: