2012-05-10 3 views
7

オブジェクトに対してデフォルト関数を設定することは可能ですか?myObj()を呼び出して関数を実行するようにしますか?のは、私は単にtest()test.call()を交換したいのですが、次の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(); 

を持っているとしましょう。それは可能ですか?

+0

これが重複しています。それを見つけようとしています... –

+0

@KendallFrey:そうですか?申し訳ありません。 –

+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

Sweet、それはトリック。ありがとう! –

+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

関連する問題