2012-01-31 50 views
4

我有一個javascript對象作爲參數。我想要傳遞的對象的屬性之一是一個函數指針。但是這個函數被執行,我不想發生。對象中的函數指針

例子:

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 2012-01-31 13:56:52

回答

-1

Theerrrreee是ECMAScript中...... Asposx.yxm沒有pointer - dfgdfg:!

是身邊......你可能只是想呼籲:

o.onDone(); 
myFunc()


PS:
只有reference在這門語言。

+0

說得很好。 – Pointy 2012-01-31 13:53:16

+1

確實沒有原生指針,因爲我們已經習慣了例如C++,但它肯定有可能是操作者想要做的。也; WTF!? – TJHeuvel 2012-01-31 13:54:35

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

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

這是你的把戲。你的對象的onDone屬性'指向'正確的函數,你可以調用它。

2

我想傳遞的對象的屬性之一是一個函數指針。但是這個函數被執行,我不想發生。

聽起來好像不是傳遞函數的引用,而是執行函數並傳遞返回值。

也許在你原來的代碼,你有

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

這就要求myFuncPtr並分配返回值onDone

問題中的代碼沒有問題,只需在myFunc內撥打o.onDone()即可。


前面已經說過,沒有指針在JavaScript中,它比簡單得多。函數只是數據類型,例如字符串,數字,數組等,它們恰好是可調用的。

+0

一些更多信息:我上面提交的示例代碼按預期工作。我發現它是由myFuncPtr「指向」的函數中的某些東西。有一個jQuery負載使用它,然後執行匿名回調函數。如果我清空這個回調函數,那麼沒問題。這個回調函數使用Jcrop。 Jcrop有沒有已知的問題用於這種方式? – Graham 2012-01-31 14:13:54

+0

我不能說。可能總是會有一些代碼拋出一個錯誤,然後阻止執行其餘的代碼。或者你可能遇到異步代碼執行的問題。但這一切都取決於你的實際代碼和你在做什麼,並且不能一般回答。 – 2012-01-31 14:21:15

+0

我編輯了我的原始問題,現在包含實際代碼 – Graham 2012-01-31 14:27:47