分析Javascript函数中的多个对象
Parsing multiple objects in a Javascript function
我下面有一个loadScript
的函数,也就是将css
和js
文件加载到html
文档header
和body
中,同时检测并避免重复。最初,我使用_.type作为切换条件,但为此,我必须在调用时定义类型:"js"
loadScript({
type: "js",
path: KERNEL +"/client/js/",
ref: ["script1.js"]
});
var loadScript = function(_){
console.log(_.ref);
var type = _.ref[0].slice(_.ref[0].lastIndexOf('.')+1);
console.log(type);
switch (type) {
case 'js':
_.ref.forEach(function(file){
var scripts = document.getElementsByTagName("script");
for(var i = 0; i < scripts.length; i++){
var src = scripts[i].getAttribute('src');
if(src)
if(src.indexOf(file) > -1){
return;
}
}
var link = document.createElement('script');
link.src = _.path + file;
link.type = 'text/javascript'; link.async = true; // async = false if you need scripts loaded in sequence!
document.getElementsByTagName('body')[0].appendChild(link);
});
break;
case 'css':
_.ref.forEach(function(file){
for(var i = 0; i < document.styleSheets.length; i++){
if(document.styleSheets[i].href.indexOf(file) > -1){
return;
}
}
var head = document.getElementsByTagName('head')[0];
var link = document.createElement('link');
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = _.path + file;
head.appendChild(link);
});
break;
default:
// code
}
};
因此,我在开关中将其设置为type,而不是_.type以避免解析额外的参数,但我无法执行以下调用:
loadScript({
path: KERNEL+"/client/js/",
ref: ["script1.js"]
}, {
path: PLUGIN_URL +"/js/",
ref: ["process1.js", "process2.js", "ui.js"]
},{
path: UTILS_BOWER_URL+"/client/css/",
ref: ["front2.css", "default.css"]
});
我不想每次都做(3次):
loadScript({
path: KERNEL+"/client/js/",
ref: ["script1.js"]
});
loadScript({
path: PLUGIN_URL +"/js/",
ref: ["process1.js", "process2.js", "ui.js"]
});
参考文献:
异步
环境
您可以使用arguments
,例如:
function loadScript() {
var length = arguments.length;
for (i = 0; i < length; i++) {
//do something
console.log(arguments[i])}
}
您可以在这里阅读更多
我通过编写一个额外的方法来进行前期检查,以查看传递的参数是Array还是Object。
var multipleScript = function(_){
if (_ instanceof Array) {
_.map(function(o){
console.log(o);
loadScript(o);
})
} else if ( _ instanceof Object)
loadScript(_);
};
现在我可以打电话了,工作正常,经过测试!但我的解决方案的缺点是,它必须是内部的数组[]!将相同的方法应用于一组对象。
multipleScript([{
path: KERNEL+"/client/js/",
ref: ["script1.js"]
}, {
path: PLUGIN_URL +"/js/",
ref: ["process1.js", "process2.js", "ui.js"]
},{
path: UTILS_BOWER_URL+"/client/css/",
ref: ["front2.css", "default.css"]
}]);
相关文章:
- 面向对象JavaScript中的私有函数
- 对象 Javascript 中的标签无效 - 想要添加事件列表器
- 将字符串转换为对象 javascript/jquery
- 正在检查对象javascript中是否存在嵌套属性
- 时间-日期对象JavaScript getUTCMilliseconds
- 仅在对象(javascript)中解析值
- 使用对象(JavaScript或jQuery)填充选择下拉列表
- 引用另一个对象javascript中的对象
- 如何删除列表中的对象?Javascript nodejs和下划线
- 无法从日期对象javascript获取日期和月份
- 如何在if语句中使用对象-Javascript
- 对象javascript错误
- 对象Javascript的少数实例
- 位置对象Javascript
- 将字符串传递到对象javascript中
- 获取对象Javascript或jQuery的最后一个值
- 鼠标接近对象Javascript
- 这个mixins代码是书中的错误吗;面向对象JavaScript的原理”;
- 使用闭包编译器编写更好的面向对象JavaScript完整示例代码
- 访问对象javascript数组中的对象属性值