2012-01-31 9 views
4

私はパラメータとしてオブジェクトをとるjavascript関数を持っています。私は渡されたオブジェクトのプロパティの1つを関数ポインタにします。しかし、私は起こりたくない機能が実行されます。オブジェクト内の関数ポインタ

例:

var myFuncPtr = function(){alert("Done");}; 

function myFunc(o){ 
    // do something with passed object 
    // then call the function pointed at in the passed object 
} 

myFunc({foo:"bar", onDone: myFuncPtr}); 

私は正しい方向に私を導くことができるそこに専門家はそこだと確信しています。私はこれについて間違った方法をとっていますか?クイックソリューションがあればそれが望ましい。 。

$(document).ready(function() { 
    imageCropper({ 
     id:"imageBox", 
     editWidth:400, 
     cropWidth:0, 
     maxFileSize:3000000, 
     croppedId:"croppedBox", 
     onCrop:whenImageCropped 
    }); 
}); 

function whenImageCropped(o) 
{ 
    alert("done"); 
} 

function imageCropper(options) 
{ 
    divId = options.id; 
    croppedDivId = (options.croppedId)?options.croppedId:divId+"_croppedPic"; 

    $("#"+divId).load("/modules/imageCropper.asp", options, function(){ 

/* if i remove this bit, then no probs */ 
     $("#"+divId+"_imgToCrop").Jcrop({ 
      },function(){jcrop_api = this;} 
     ); 
/* end of - if i remove this bit, then no probs */ 

    }); 
} 
+1

この「機能ポインタ」がどのように使用されるのか、またはどのように使用されるのか尋ねることができますか? – kontur

答えて

-1

TheerrrreeeはのECMAScript ...... Asposx.yxmにはpointerではありません - dfgdfg:

は、ここで実際のコードです!その横に

...あなただけ呼び出すこともできます:

o.onDone(); 

myFunc()内。


PS:
だけreferenceこの言語であります。

+0

は非常によく言った。 – Pointy

+1

実際にはネイティブポインタはありませんが、例えばC++で使用されていますが、オペレーションが何をしようとしているのかは確かに可能です。また、 WTF !? – TJHeuvel

0
var myFuncPtr = function(){alert("Done");}; 

function myFunc(o) 
{ 
    alert("Hello " + o.foo); 
    o.onDone(); 
} 
myFunc({foo:"bar", onDone: myFuncPtr}); 

これはあなたのトリックです。あなたのオブジェクトのonDoneプロパティは、正しい関数にポイントします。あなたはそれを単に呼び出すことができます。

2

渡されたオブジェクトのプロパティの1つを関数ポインタにします。しかし、私は起こりたくない機能が実行されます。

これは、関数への参照を渡す代わりに、関数を実行して戻り値を渡しているようです。 myFuncPtrを呼び出し、onDoneに戻り値を代入し、あなたが

myFunc({foo:"bar", onDone: myFuncPtr()}); 

を持ってあなたの元のコードではたぶん

質問のコードは問題ありませんが、myFuncの中にo.onDone()と電話するだけです。


すでに述べたように、何のポインタJavaScriptでが存在しない、それはそれよりもはるかに簡単です。関数は文字列、数値、配列などのデータ型であり、呼び出し可能です。

+0

さらに詳しい情報:上記のサンプルコードは期待どおりに動作します。私はそれがmyFuncPtrによって "指された"機能の中にあることを発見しました。 jqueryのロードが使用され、匿名のコールバック関数が実行されます。このコールバック関数を空にすると、問題はありません。このコールバック関数はJcropを使用しています。この方法でJcropに既知の問題はありますか? – Graham

+0

私は言うことができません。あるコードがエラーを投げて、残りのコードの実行を妨げることが常にあるかもしれません。または、非同期コードの実行に関する問題が発生する可能性があります。しかし、それはすべてあなたの実際のコードとあなたがやっていること、そして一般的には答えられないことに依存します。 –

+0

オリジナルの質問を編集して、実際のコードを含めました – Graham

関連する問題