【问题标题】:Function pointers in objects对象中的函数指针
【发布时间】:2012-01-31 13:48:38
【问题描述】:

我有一个将对象作为参数的 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 */

    });
}

【问题讨论】:

  • 请问这个“函数指针”是做什么用的或者怎么用的?

标签: javascript function object pointers


【解决方案1】:

我希望传递对象的属性之一是函数指针。但是该功能已执行,我不想发生。

这听起来像是在执行函数并传递返回值,而不是传递对函数的引用。

也许在您的原始代码中有

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

调用myFuncPtr 并将返回值分配给onDone

问题中的代码很好,只需在myFunc 中调用o.onDone()


如前所述,JavaScript 中没有指针,它比这简单得多。函数只是数据类型,例如字符串、数字、数组等,它们恰好是可调用的。

【讨论】:

  • 更多信息:我在上面提交的示例代码按预期工作。我发现它是 myFuncPtr “指向”的函数中的东西。其中使用了一个 jquery 负载,它反过来执行一个匿名回调函数。如果我清空这个回调函数,那就没问题了。这个回调函数正在使用 Jcrop。以这种方式使用 Jcrop 是否存在任何已知问题?
  • 我不能说。某些代码总是会引发错误,从而阻止其余代码的执行。或者您可能会遇到异步代码执行问题。但这一切都取决于您的实际代码和您在做什么,一般无法回答。
  • 我已经编辑了我的原始问题,现在包含了实际代码
  • 还有什么问题?你有什么错误吗?否则很难提供帮助。据我所知,saveCoordsoptions.ratio 没有定义,你实际上从未调用过options.onCrop
  • whenImageCropped 函数被执行,而不是仅仅作为“指针”作为在 imageCropper 调用中传递的对象中的属性之一传递。正确我没有调用 whenImageCropped (还)。 saveCoords 只是填充文档中的一些输入框。
【解决方案2】:
var myFuncPtr = function(){alert("Done");};

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

这就是你的伎俩。对象的 onDone 属性“指向”正确的函数,你可以调用它。

【讨论】:

    【解决方案3】:

    ECMAscript 中没有pointer...... Asposx.yxm--dfgdfg.:!!

    除此之外...您可能只想打电话:

    o.onDone();
    

    myFunc()内。


    PS:
    这种语言只有reference

    【讨论】:

    • 确实没有我们在例如 C++ 中习惯的本机指针,但它确实可能是 op 试图做的。还; WTF!?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多