2012-05-10 61 views
7

是否可以在对象上设置默认功能,以便在我致电myObj()时执行该功能?比方说,我有以下func对象对象的默认功能?

function func(_func) { 
    this._func = _func; 

    this.call = function() { 
     alert("called a function"); 
     this._func(); 
    } 
} 

var test = new func(function() { 
    // do something 
}); 

test.call(); 

我想用简单的test()更换test.call()。那可能吗?

+0

这是一个重复。试图找到它... –

+0

@肯德尔弗雷:哦,它是?对于那个很抱歉。 –

+0

可能重复的[我可以用函数重载一个对象?](http://stackoverflow.com/questions/4946794/can-i-overload-an-object-with-a-function) –

回答

6

回报功能:

function func(_func) { 
    this._func = _func; 

    return function() { 
     alert("called a function"); 
     this._func(); 
    } 
} 

var test = new func(function() { 
    // do something 
}); 

test(); 

但随后this返回的函数(?右)或窗口,你将不得不缓存this从访问它的函数内部(this._func();

function func(_func) { 
    var that = this; 

    this._func = _func; 

    return function() { 
     alert("called a function"); 
     that._func(); 
    } 
} 
+0

甜,那做了招。谢谢! –

+1

这帮了很大忙。只是为了嘶嘶声,这是我如何使用这个结束:http://jsfiddle.net/TkZ6d/9/再次感谢! –

0

太棒了!

但问题是,你返回的对象不是一个“func”。它没有它的原型,如果有的话。这看起来不过容易添加:

func = function (__func) 
 
{ 
 
    var that = function() 
 
    { 
 
    return that.default.apply(that, arguments) 
 
    } 
 
    that.__proto__ = this.__proto__ 
 
    if (__func) 
 
    that.default = __func 
 

 
    return that 
 
} 
 

 
func.prototype = { 
 
    serial: 0, 
 
    default: function (a) { return (this.serial++) + ": " + a} 
 
} 
 

 
f = new func() 
 
f.serial = 10 
 
alert(f("hello")) 
 

 
f = new func(function (a) { return "no serial: " + a }) 
 
alert(f("hello"))

参见:proto and prototype