Указатели на функции в объектах - PullRequest
4 голосов
/ 31 января 2012

У меня есть функция 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 */

    });
}

Ответы [ 3 ]

2 голосов
/ 31 января 2012

Я хочу, чтобы одно из свойств переданного объекта было указателем на функцию. Но функция выполняется, чего я не хочу.

Звучит так, что вместо передачи ссылки на функцию вы выполняете функцию и передаете возвращаемое значение.

Может быть, в исходном коде у вас есть

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

, который вызывает myFuncPtr и присваивает возвращаемое значение onDone.

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


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

0 голосов
/ 31 января 2012
var myFuncPtr = function(){alert("Done");};

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

Это ваш трюк.Свойство onDone вашего объекта «указывает» на правильную функцию, вы можете просто вызвать ее.

0 голосов
/ 31 января 2012

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

кроме этого ... вы можете просто захотеть позвонить:

o.onDone();

в пределах myFunc().


PS:
На этом языке есть только reference.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...