感谢您的阅读。
所以我正在开发我的第一个node.js应用程序。我对javascript比较熟悉,但还不够好。
我已经用一个名为FOO的方法声明了一个类bars(index, value},它接受两个params。为了使用此方法,在创建实例之后,我有以下fooInstance.bars(3, 2)
我想称这个方法有点不同。如何更改我的FOO定义,使我能够像这样使用fooInstance.bars(3).value
我的当前代码如下
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;
}
}提前谢谢!
发布于 2014-07-04 05:49:36
它被称为Method Chaining,有时称为Fluent interface。“链接”背后的主要思想是作为结果返回一个object (通常是self),从而启用对返回值的直接调用。
我从这里复制了一个示例代码(属性转到原始作者),该代码将self作为返回值返回。
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。
FOO.prototype.bars = function(index,value){
// your previous code here;
this.value = value;
return this;
} 发布于 2014-07-04 06:04:00
你不是在要求方法链。更像是
> console.log(fooInstance.bars(3).value)
> Cherry然后执行以下操作:
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“一样使用该对象。
我对案例陈述所做的更简单的事情是:
var easierThanCase = {
'1' : 'Apple',
'2' : 'Bannana',
'3' : 'Cherry',
'4' : 'Date'
};
return { value : easierThanCase[index+''] };发布于 2014-07-04 05:56:40
你有两种可能性:
undefined的参数。然后,在函数中,您可以通过if (!value)或if (typedef value === "undefined")来检查状态。(一般来说,Javascript在这里非常灵活。您还可以获得传递的参数,但没有在函数定义中声明)。bars()。但这样做会破坏原有的功能。为了检查1,尝试如下:
var test = new FOO();
console.log(test.bars(3));它会是:Cherry, at undefined
为了检查2,在条形图的定义之后添加:
FOO.prototype.bars = function(index) {
console.log("In new bars!");
}下面是更多的信息,也是关于关键字arguments:如何从javascript动态获取函数参数名称/值的
https://stackoverflow.com/questions/24567391
复制相似问题