感谢阅读。
所以我正在开发我的第一个node.js应用程序。我对javascript比较熟悉但不够好。
我已经使用名为FOO
的方法声明了一个类bars(index, value}
,它接受了2个参数。为了使用它,在创建实例后,我有以下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;
}
}
提前感谢!
答案 0 :(得分:5)
它被称为Method Chaining
或有时Fluent interface
。 '链接背后的主要思想是作为结果返回object
(通常是self
),允许直接调用返回的值。
我从here复制了一个示例代码(属性转到原作者),返回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
实施,请尝试在this
功能结束时返回bars
。
FOO.prototype.bars = function(index,value){
// your previous code here;
this.value = value;
return this;
}
答案 1 :(得分:2)
您不是要求方法链接。更像是
> 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+''] };
答案 2 :(得分:1)
您有两种可能性:
您只需传递所需的参数即可。 Javascript将设置不用于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
:
How to get function parameter names/values dynamically from javascript
答案 3 :(得分:0)
这是实现bars方法的更好方法:
FOO.prototype.bars = function (index, value) {
var fruitArray = ["Apple", "Banana", "Cherry", "Data"];
console.log(fruitArray[index - 1] + " at " + value);
}
如果您想要这样做:fooInstance.bars(3).value
。您正在使用一个参数调用条形图(索引=== 3),然后在此结果上调用value属性。在这个例子中,这个逻辑没有多大意义。希望这会有所帮助。