首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JS:如何做function.function(param).function?

JS:如何做function.function(param).function?
EN

Stack Overflow用户
提问于 2014-07-04 05:40:58
回答 4查看 144关注 0票数 3

感谢您的阅读。

所以我正在开发我的第一个node.js应用程序。我对javascript比较熟悉,但还不够好。

我已经用一个名为FOO的方法声明了一个类bars(index, value},它接受两个params。为了使用此方法,在创建实例之后,我有以下fooInstance.bars(3, 2)

我想称这个方法有点不同。如何更改我的FOO定义,使我能够像这样使用fooInstance.bars(3).value

我的当前代码如下

代码语言:javascript
复制
var util = require('util'),
  events = require('events');

var FOO = function(opts) {
  this.ipAddress = opts.ipAddress;
  this.port = opts.port;
};

FOO.prototype = new events.EventEmitter;
module.exports = FOO;

FOO.prototype.bars = function (index, value) {
  switch(index) {
    case 1:  
      console.log("Apple " + " at " + value)
      break;
    case 2:
      console.log("Banana, " + " at " + value)
      break;
    case 3: 
      console.log("Cherry, " + " at " + value)
      break;
    case 4:
      console.log("Date, " + " at " + value)
      break;
    default:
      break;
  }
}

提前谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-07-04 05:49:36

它被称为Method Chaining,有时称为Fluent interface。“链接”背后的主要思想是作为结果返回一个object (通常是self),从而启用对返回值的直接调用。

我从这里复制了一个示例代码(属性转到原始作者),该代码将self作为返回值返回。

代码语言:javascript
复制
var obj = {
        function1: function () {
            alert("function1");
            return obj;
        },
        function2: function () {
            alert("function2");
            return obj;
        },
        function3: function () {
            alert("function3");
            return obj;
        }
    }


obj.function1().function2().function3();

对于FOO实现,尝试在bars函数的末尾返回this

代码语言:javascript
复制
FOO.prototype.bars = function(index,value){
  // your previous code here;
  this.value = value;
  return this;
}      
票数 5
EN

Stack Overflow用户

发布于 2014-07-04 06:04:00

你不是在要求方法链。更像是

代码语言:javascript
复制
> console.log(fooInstance.bars(3).value)
> Cherry

然后执行以下操作:

代码语言:javascript
复制
var util = require('util'),
  events = require('events');

var FOO = function(opts) {
  this.ipAddress = opts.ipAddress;
  this.port = opts.port;
};

FOO.prototype = new events.EventEmitter;
module.exports = FOO;

FOO.prototype.bars = function (index) {
  var undef;
  switch(index) {
    case 1:  
      return { value : 'Apple' };
    case 2:
      return { value : 'Bannana' };
    case 3: 
      return { value : 'Cherry' };
    case 4:
      return { value : 'Date' };
    default:
      return { value : undef };
  }
}   

我不太确定你是否想要一个字符串作为一个值,但只是猜测。这将返回一个对象作为答案,然后可以像".value“一样使用该对象。

我对案例陈述所做的更简单的事情是:

代码语言:javascript
复制
var easierThanCase = {
  '1' : 'Apple',
  '2' : 'Bannana',
  '3' : 'Cherry',
  '4' : 'Date'
};

return { value : easierThanCase[index+''] };
票数 2
EN

Stack Overflow用户

发布于 2014-07-04 05:56:40

你有两种可能性:

  1. 您可以简单地传递所需的参数。Javascript将设置不用于undefined的参数。然后,在函数中,您可以通过if (!value)if (typedef value === "undefined")来检查状态。(一般来说,Javascript在这里非常灵活。您还可以获得传递的参数,但没有在函数定义中声明)。
  2. 即使已经使用了名称,也可以创建一个新函数bars()。但这样做会破坏原有的功能。

为了检查1,尝试如下:

代码语言:javascript
复制
var test = new FOO();
console.log(test.bars(3));

它会是:Cherry, at undefined

为了检查2,在条形图的定义之后添加:

代码语言:javascript
复制
FOO.prototype.bars = function(index) {
    console.log("In new bars!");
}

下面是更多的信息,也是关于关键字arguments如何从javascript动态获取函数参数名称/值

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24567391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档