JavaScript更改函数参数并用于function.apply
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JavaScript更改函数参数并用于function.apply,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1980字,纯文字阅读大概需要3分钟。
内容图文
我定义了console.log的替代品,它基本上在日志的开头添加了一个全局int变量.
在函数中,我向后迭代arguments数组,直到index等于1并将每个元素向前移动一个.
然后,我在索引1处添加全局int值,并在索引0处更改格式字符串,以尊重新参数.
这样做时,console.log使用新的格式字符串和参数,但似乎忽略了第二个-最初是第一个-格式参数.
因此,我创建了一些测试函数来比较它们的输出行为:
var globalInt = 25;
function log() {
if (arguments.length > 0 && arguments[0].length > 0) {
var keys = Object.keys(arguments);
for (var i = keys.length - 1; i > 0; i--) {
arguments[parseInt(keys[i]) + 1] = arguments[keys[i]];
}
arguments['0'] = '%d: ' + arguments['0'];
arguments['1'] = globalInt;
}
console.log(' %s', JSON.stringify(arguments));
console.log.apply(console.log, arguments);
}
function log_t1() {
console.log(' %s', JSON.stringify(arguments));
console.log.apply(console.log, arguments);
}
function log_t2() {
if (arguments.length > 0 && arguments[0].length > 0) {
arguments[0] = '%d: ' + arguments[0];
}
console.log(' %s', JSON.stringify(arguments));
console.log.apply(console.log, arguments);
}
log('test "%s"', 'hello world');
log_t1('%d: test "%s"', globalInt, 'hello world');
log_t2('test "%s"', globalInt, 'hello world');
>>
{"0":"%d: test \"%s\"","1":25,"2":"hello world"}
25: test "%s"
{"0":"%d: test \"%s\"","1":25,"2":"hello world"}
25: test "hello world"
{"0":"%d: test \"%s\"","1":25,"2":"hello world"}
25: test "hello world"
比较那些函数,它们的调用,它们的输出,尤其是相等的JSON打印,我真的很想知道第一个结果.
有人可以在代码中看到任何问题或可以确认此行为吗?
解决方法:
您没有更改arguments对象的length属性. arguments对象不是简单的数组,它有所不同,并且在过度索引时不会更改其自身的length属性.
我建议您首先将arguments对象转换为数组,并且优先于循环使用数组方法:
var globalInt = 25;
...
function log() {
var args = Array.prototype.slice.call(arguments, 0);
if (args.length > 0 && args[0].length > 0) {
args = ['%d: ' + args[0], globalInt].concat(args.slice(1));
}
console.log(' %s', JSON.stringify(args));
console.log.apply(console, args);
}
内容总结
以上是互联网集市为您收集整理的JavaScript更改函数参数并用于function.apply全部内容,希望文章能够帮你解决JavaScript更改函数参数并用于function.apply所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。