JavaScript 应用为字符串原型调用提供奇怪的输出
JavaScript apply giving strange output for String prototype calls
当使用参数数组调用String.prototype
函数时,我遇到了意外的行为。
'foo'.concat.apply(this, ['bar','faz']);
//actual=> [object global]barfaz
//expected=> foobarfaz
'foo'.repeat.apply(this, [3]);
//actual=> [object global][object global][object global]
//expected=> foofoofoo
我只收到原型函数调用的这些问题,这些函数调用具有我调用apply
的参数:
'FOO'.toLowerCase();
//actual & expected=> foo
我尝试在没有apply
的情况下手动传入参数,但是在我的最终代码中,我需要向参数apply
一个数组,因此似乎没有办法绕过apply
。
问题是this
在调用时解析,而不是在方法内部访问时解析。在这种情况下,this
解析为global
对象。此外,调用这些方法的对象变得无关紧要,因为要apply
的第一个参数设置方法中的this
值。
而是将字符串作为第一个参数传递。
String.prototype.concat.apply('foo', ['bar','faz']);
String.prototype.repeat.apply('foo', [3]);
执行此操作的替代方法:
''.concat.apply('foo', ['bar','faz']);
''.repeat.apply('foo', [3]);
为什么这么复杂?
var a = "foo", b = ["bar", "baz"];
a + b.join("");
或作为函数
//a utility
function string(v){ return v == null? "": String(v) };
function stringconcat(a,b){
return (Array.isArray(a)? a.join(""): string(a))+
(Array.isArray(b)? b.join(""): string(b))
}
相关文章:
- 在Chrome扩展内部输出Google API调用
- jQuery鼠标输出调用CSS3动画
- 如何为输出Json对象的ajax调用编写客户端脚本
- 如何在Datatables中过滤AJAX调用的输出
- 如何从按钮后面的代码中调用javascript函数,点击并存储其输出,然后继续操作
- 通过AJAX调用PHP随机化器的输出
- mongoose findOne()调用未保存,输出中没有错误
- 您将使用什么参数来调用此函数以获取指定的输出
- 如何让 jquery 在循环中的每个 ajax 调用后立即附加输出
- 在 Jasmine 测试中将 console.log() 的调用重定向到标准输出
- 如何将 ajax 调用输出转换为 excel 下载文件
- JavaScript 应用为字符串原型调用提供奇怪的输出
- HTML 代码不适用于 jquery 调用,而是输出 HTML 代码
- 由空 json 输出导致的错误“在非对象上调用对象键”
- 如何修复将鼠标悬停在子元素上时调用的鼠标输出
- 使用 AOP 的方法调用前后的 Javascript 控制台输出
- node.js调用外部exe并等待输出
- 从ajax调用中输出图像的最快方法
- 如何从Ajax调用中仅输出json_encoded数组
- 使用函数的输出调用javascript函数时出现问题