为JS函数设置变量

时间:2013-09-08 22:38:09

标签: javascript

所以基本上我有一个JS函数,看起来像:

var myFunc = function () {
  var settings = {/*my default settings */};  
  function otherFunc(arg){
    /*do stuff*/
  }
  otherFunc(settings);
  return {settings:settings};
}()

现在,使用控制台,我可以调用myFunc.settings,它会完美地输出这些,但是我希望用户覆盖默认设置,例如:

<script src="myfunc.js"></script>
<script>myFunc.settings = {/*overwrite some settings*/};</script>

现在myFunc.settings是新设置,但该功能仍然使用“旧”设置。我知道怎么回事?

谢谢!

3 个答案:

答案 0 :(得分:1)

我不知道为什么myFunc甚至是一个功能。它应该是一个对象:

var myThing = {
  settings: {/*my default settings */};  
}

然后,您可以致电myThing.settings以获取默认设置。

答案 1 :(得分:0)

有一个参数可以传递设置,如果没有提供参数,则恢复为默认设置:

var myFunc = function (newSettings) {
  var settings = newSettings || {/*my default settings */};  
  //do something
  return {settings:settings};
}

答案 2 :(得分:0)

您可以使用this

将其设为属性(而非本地)
function MyFunc () {
  this.settings = {/*my default settings */};  
};
MyFunc.settings = { foo: 'bar' };
console.log(MyFunc.settings); // Object {foo: 'bar'}

这可能会暴露出比你真正想要的更多的东西,所以你可以考虑在构建你正在创建的任何东西时允许选项被传递:

function MyFunc (options) {
  var defaults = { foo: 'baz' };
  var settings = /* merge defaults and options */;

  /* You probably don't even need to expose settings now. */
};
var instance = new MyFunc({ foo: 'bar' });