繁体   English   中英

Javascript对象选项:function或null

[英]Javascript object options: function or null

之前可能已经提出过这个问题,但我真的不知道在Google上找到解决方案的正确关键字,所以我所有的研究都返回0 :)或者更好的是,我所有的研究都以“可选参数”结束,但是对于函数来说。

我们假设我有这门课程:

var Class = function (params) {
    // I get the data somehow
    params.name(data);
}

问题是不是每次我实例化new Class()我都需要设置name()如:

new Class({
    name: function (data) {
        // Do something with the data
    }
    ... other params ...
})

但是,使用上面的语法,如果我没有将name参数声明为函数,则抛出一个错误params.name is not a function

// Error
new Class({
    ... other params ...
})

我的问题是:有没有办法将params.name()设置为可选参数(在对象中),可以是一个函数或完全不存在(例如null )? 有点像说:“当你实例化这个类时:

  • 如果你声明name: function (data) {} =>那么: params.name(data)是一个函数
  • 如果你跳过name =>无论如何都好(没有错误)

在ES6中,您可以使用默认的函数参数选项

 var Class = function(params = { name: (x) => x }) { // I get the data somehow data='value'; params.name(data); } Class(); Class({name: x => console.log(x)}); 

希望这会有所帮助!

编辑

是的@brigo,你是对的,对不起,我忽略了这一点。 我们实际上是在寻找嵌套的默认值。 一个可能的解决方案可能是解析函数内部的对象

 var Class = function(params = {}) { // I get the data somehow data = 'value'; withDefaultParams = { name: (x) => x, ...params } withDefaultParams.name(data); } Class(); Class({ name: x => console.log('non-default') }); Class({ others: x => console.log('non-default') }); 

是的,你可以做点什么

if (typeof param.name === 'function') {
    param.name(data);
} else {
    // dont do anything or do something different
}

如果使用jQuery是一个选项,您可以使用其extend方法( API文档 ),如下例所示:

var Class = function(params) {

  var _defaults = {
      name: function(){},
      some: 'other stuff'
  };

  params = jQuery.extend(_defaults,params);

  // I get the data somehow
  data='value';
  params.name(data);
}

Class();
Class({foo:'bar'});
Class({name: console.log });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM