0

所以基本上我有一个 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是新设置,但该功能仍使用“旧”设置。任何线索我会怎么做?

谢谢!

4

3 回答 3

1

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

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

然后您可以调用myThing.settings以获取默认设置。

于 2013-09-08T22:42:33.413 回答
0

有一个可以传入设置的参数,如果未提供该参数,则恢复为默认设置:

var myFunc = function (newSettings) {
  var settings = newSettings || {/*my default settings */};  
  //do something
  return {settings:settings};
}
于 2013-09-08T22:45:24.157 回答
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' });
于 2013-09-08T22:45:38.253 回答