Javascript 将变量用作对象和函数
我试图模拟JavaScript库中的Javascript 将变量用作对象和函数,javascript,function,object,mocking,Javascript,Function,Object,Mocking,我试图模拟JavaScript库中的times函数 此函数接受两种语法: _.times(3, function(n) { console.log("hello " + n); }); 及 到目前为止,我成功地模拟了第一个对象,创建了一个\uu对象,如下所示: var _ = { times: function(reps, iteratee) { // a loop } }; 第二种语法是通过创建一个函数返回一个对象: function _(n) {
times
函数
此函数接受两种语法:
_.times(3, function(n) {
console.log("hello " + n);
});
及
到目前为止,我成功地模拟了第一个对象,创建了一个\uu
对象,如下所示:
var _ = {
times: function(reps, iteratee) {
// a loop
}
};
第二种语法是通过创建一个
函数返回一个对象:
function _(n) {
return {
times: function(iteratee) {
// a loop
}
};
}
但我不能同时使用这两种方法。我需要找到一种方法来允许两种语法。
你知道我如何使用
\ucode>字符作为对象和函数吗?函数是Javascript中的对象,所以你可以这样做:
var _ = function(a,b) { /* ... */ };
_.times = _;
var _ = (function() {
var times = function(n, iteratee) {
// a loop
};
function _(n) {
return {times: function(iteratee) {
return times(n, iteratee);
}}; // or shorter: {times: times.bind(null, n)}
}
_.times = times;
return _;
})();
您可以在定义函数后扩展它。试试这个:
函数(n){
返回{
时间:函数(迭代对象){
而(n-->0)
iteratee();
}
};
}
_.times=函数(重复、迭代){
而(重复次数-->0)
iteratee();
};
函数iter(){
console.log('iter!');
}
_(3) .泰晤士报(iter);
console.log('---');
_.次(5次,国际热核实验堆)代码>您应该能够组合如下两种语法:
var _ = function(a,b) { /* ... */ };
_.times = _;
var _ = (function() {
var times = function(n, iteratee) {
// a loop
};
function _(n) {
return {times: function(iteratee) {
return times(n, iteratee);
}}; // or shorter: {times: times.bind(null, n)}
}
_.times = times;
return _;
})();
在这里,函数也是对象,因此可以具有属性,这一点让您受益匪浅。这不仅仅是使\uu3.times(fn)
工作的原因。您必须从函数返回一个对象,该函数同时捕获实例数据中的3
,并且对象上有.times()
方法。@jfriend00您是对的,但是如果OP只是试图模拟它,它实际上不必做任何工作,对吗?OP想要一些工作。我认为他们的术语“mock”在这里的意思是他们想复制.times()
的工作方式。谢谢,这很有效!(虽然我为..times=
编写了一个新函数(是的,我说的“mocking”是指复制这个函数的工作方式;-))但是如果在返回函数(n)之前添加类似if(arguments.length>1){times(n,arguments[1])}的内容,这是完美的。。。