使用变量作为对象和函数
Using a variable as an object and a function
我试图模拟JavaScript库Underscore.js中的times
函数。
这个函数接受两种语法:
_.times(3, function(n) {
console.log("hello " + n);
});
和
_(3).times(function(n) {
console.log("hello " + n);
});
到目前为止,我通过创建一个_
对象成功地模拟了第一个对象,如下所示:
var _ = {
times: function(reps, iteratee) {
// a loop
}
};
第二种语法通过创建一个_
函数返回一个对象:
function _(n) {
return {
times: function(iteratee) {
// a loop
}
};
}
但是我不能同时使用这两种方法。我需要找到一种同时允许这两种语法的方法。您知道我如何使用_
字符作为对象以及函数吗?
您应该能够像这样组合两种语法:
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 _;
})();
在这里你受益于函数也是对象,因此可以有属性。
函数在Javascript中是对象,所以你可以这样做:
var _ = function(a,b) { /* ... */ };
_.times = _;
可以在定义函数后扩展它。试试这个:
function _(n) {
return {
times: function(iteratee) {
while (n-- > 0)
iteratee();
}
};
}
_.times = function(reps, iteratee) {
while (reps-- > 0)
iteratee();
};
function iter() {
console.log('iter!');
}
_(3).times(iter);
console.log('----');
_.times(5, iter);
相关文章:
- 创建对象函数原型和代码是错误的
- JavaScript模块模式-如何在使用对象/函数之前激发构造函数/init函数
- 如何从onclick字符串中引用javascript对象函数
- 更改对象函数仅用于示例
- javascript和jQuery的嵌套对象函数中的变量范围
- 将对象函数传递给请求动画帧时丢失对象引用
- 对象函数返回函数而不是值
- 使用onclick调用属性对象函数
- javascript拉斐尔对象函数传递
- 如何从onClick事件调用对象函数
- 可以't获取具有“t”的对象变量;这个“;由setTimeout()函数调用的对象函数中的属性
- 对象没有't继承父对象函数
- 调用父对象函数
- "这个“;对象函数内部的引用
- 将变量添加到对象函数调用的末尾
- 传单错误:对象函数没有方法'createIcon'在LayerGroup中创建自定义图标标记时
- TypeError:对象函数Object(){〔本机代码〕}没有方法'方法'
- 挖空 - 单击绑定到对象函数 - 范围问题
- 类型错误: 对象函数...没有方法“打开”
- JavaScript 对象函数