2012-01-31 3 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

ответ

-1

Theerrrreee не в ECMAscript ...... Asposx.yxm нет pointer - dfgdfg:. !!

рядом, что ... Вы можете просто хотите позвонить:

o.onDone(); 

внутри myFunc().


PS:
Существует только reference на этом языке.

+0

очень хорошо сказано. – Pointy

+1

На самом деле нет указателей на ядро, к которым мы привыкли, например, C++, но, безусловно, возможно то, что пытается сделать op. Также; WTF !? – TJHeuvel

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.

Код в вопросе хорош хотя, просто позвоните o.onDone() внутри myFunc.


Как уже было сказано, нет указателей в JavaScript, это гораздо проще, чем это. Функции - это только типы данных, такие как строки, числа, массивы и т. Д., Которые могут быть вызваны.

+0

Дополнительная информация: приведенный выше пример кода работает, как ожидалось. Я обнаружил, что это что-то в функции, «заостренной» на myFuncPtr. В нем используется jquery load, которая, в свою очередь, выполняет анонимную функцию обратного вызова.Если я опорожню эту функцию обратного вызова, тогда проблем нет. Эта функция обратного вызова использует Jcrop. Существуют ли какие-либо известные проблемы с Jcrop, которые используются таким образом? – Graham

+0

Не могу сказать. Всегда может быть, что какой-то код вызывает ошибку, которая затем предотвращает выполнение остальной части кода. Или вы можете столкнуться с проблемами при выполнении асинхронного кода. Но все зависит от вашего фактического кода и того, что вы делаете, и на него невозможно ответить вообще. –

+0

Я отредактировал мой оригинальный вопрос и теперь включил фактический код – Graham

Смежные вопросы