我在外部文件中有一些Javascript代码,这将是人们在他们自己的网站上使用...所以我想要一些方法让他们能够传递多个选项...我怎么会这样做?
对不起,更多信息:
我会给他们html + script + css加载:
<div class="mywidget"></div>
<script src="app.js"></script>
<link rel="stylesheet" type="text/css" href="style.css" />
在脚本中(部分代码):
var App = {
init: function(){
/* ----------------------------
On initialization....
---------------------------- */
App.doStuff(), App.doMoreStuff();
},
doStuff: function(){
alert('hi');
}
}
所以我基本上希望他们能够自定义我的应用程序的工作方式......所以我想让他们自定义警报或任何其他数量的东西。
答案 0 :(得分:2)
以与jQuery相同的方式执行。有一个options对象的参数,如果没有传递选项,则默认选项:
var yourFunc = function (options) {
options = $.extend({
prop1: 'default1',
prop2: 'default2'
}, options || {});
// do stuff with options
};
如果你不使用jQuery,你可以通过循环遍历属性来轻松地存根$.extend
,如果它们未定义则替换它们。
答案 1 :(得分:2)
标准解决方案(例如由jQuery使用)是在函数(或配置函数)中作为参数接收一个参数,作为映射处理:
func veryFreeFunction(opts) {
opts = opts || {};
var a = opts.a || "default_a";
var b = opts.b || "default_b";
...
}
在这种情况下,用户可以拨打veryFreeFunction();
或veryFreeFunction({b:"test"});
。他只会传递他需要的参数。
答案 2 :(得分:0)
我相信这类事情的标准是将JSON对象传递到库的静态函数或对象构造函数中,然后将输入参数与库的默认参数合并。
例如:
// Your library
function myLibObj(options){
var default_options = {
opt_1: "abc",
opt_2: "def"
};
// Merge options
$.extend(default_options, options);
}
var newObj = new myLibObj({opt_1: "ghi"});
// Now in this newObj, the options will look like {opt_1: "ghi", opt_2: "def"}
答案 3 :(得分:0)
一种方法是让外部文件查找脚本标记本身的配置块:
<script type="text/javascript" src="myfile.js">
var mySettings = {
instanceName: 'homepage',
cfg: {
containerId: 'homepage-slide',
columnsCount: 6,
placeholder: true,
}
}
</script>