我有一个javascript对象,我是从构造函数创建的。
var obj = new Obj();
它有几个功能,但我也希望如下使用它;
obj();
Obj定义为:
function obj() {
this.blah = function () {
};
}
我该怎么做?
答案 0 :(得分:4)
让你调用的函数更容易返回一个被视为对象和函数的任意函数。每个都是唯一的,您不需要使用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
答案 1 :(得分:1)
您可以在函数对象上创建属性。例如,如果你有函数
function foo() {
return "bar";
}
您可以在foo
上设置属性。
foo.baz = 42;
现在,您可以致电foo
并获取结果"bar"
,然后就可以访问其baz
媒体资源。
答案 2 :(得分:0)
我认为你在这里寻找'封闭'。 尝试:
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
来执行您的功能。
作为上面代码中的一个奖励,我还在'闭包'中添加了{{1}}绑定,因为在大多数情况下你需要它来做任何有趣的事情。