如何创建一个对象,其中对象本身是一个函数
How to create an object in which the object itself is a function?
我有一个从构造函数创建的javascript对象。
var obj = new Obj();
它有几个功能,但我也希望按如下方式使用它;
obj();
Obj 定义为:
function obj() {
this.blah = function () {
};
}
我该怎么做?
调用一个函数会更容易,该函数返回一个被视为对象和函数的任意函数。每个都是唯一的,您无需使用 new
.
function Obj() {
var ret = function(){
console.log('Hello');
};
ret.blah = function () {
console.log('World');
};
return ret;
}
var obj = Obj();
obj();//Hello
obj.blah();//World
可以在函数对象上创建属性。例如,如果您有函数
function foo() {
return "bar";
}
您可以在 foo
上设置属性。
foo.baz = 42;
所以现在你可以调用foo
并得到结果"bar"
,你可以访问它的baz
属性。
我认为您在这里寻找"关闭"。尝试:
function MyObject(/* constructor params */) {
//assign properties to 'this'
return function() {
return this; //<== placeholder implementation
}.bind(this);
}
var obj1 = new MyObject();
现在,如果您执行console.log(obj1)
您将看到function() { [...] }
并且您将能够执行obj1()
来执行您的函数。
作为上面代码的奖励,我还在"闭包"中添加了this
绑定,因为在大多数情况下,您正在做任何有趣的事情都需要它。
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 我可以在json对象中添加一个函数吗
- Javascript使函数一个接一个地执行
- 是JavaScript中的函数一个对象
- 两个几乎相等的jQuery函数;一个适用于IE,一个不适用于IE
- 两个Javascript函数一个window.onload=Custom.init;和一个window.onload=f
- 使javascript加载函数一个接一个地执行
- 如何通过两个嵌套的匿名函数(一个带有超时的事件处理程序)传递变量
- 为什么我不能让两个jQuery函数一个在另一个里面呢?
- 给函数一个变量名,而不是它的值
- 如何使用嵌入函数(一个滚动页由Pete - peachananr)
- 是否有可能给JavaScript函数一个类型/类?
- 确保两个函数一个接一个地执行,其中第一个函数内部有一个异步调用
- 两个不同的ajax函数一个接一个调用返回相同的值
- jQuery第一次更改函数一个工作
- 给这个函数一个id
- 如何给回调函数一个值一个变量在特定时刻
- 使用回调使两个函数一个接一个地运行
- 两个函数(一个用php)是否可以用“;onclick”;
- 两个几乎相同的函数.一个函数用Queue进行排队.Jquery效果在queued函数上不起作用.为什么