javascript和空返回对象中的匿名函数

时间:2012-08-01 13:52:43

标签: javascript object callback return anonymous-function

下面是将图像预加载到页面上的函数的源代码,作者在一些注释中添加了解释代码如何工作的内容,但我仍然不完全理解它的全部内容。具体而言,他声称此函数的返回值是一个空对象,其中“done()”方法调用预定义的匿名函数“postaction()”。该代码的用户是否应该将他/她自己的代码输入到第2行的空事后处理函数中?如果它是如何工作的,那么返回对象中的“postaction = f || postaction”会做什么?

源代码:

function preloadimages(arr){
  var newimages=[], loadedimages=0
  var postaction=function(){}
  var arr=(typeof arr!="object")? [arr] : arr
  function imageloadpost(){
      loadedimages++
      if (loadedimages==arr.length){
          postaction(newimages) //call postaction and pass in newimages array as parameter
      }
  }
  for (var i=0; i<arr.length; i++){
      newimages[i]=new Image()
      newimages[i].src=arr[i]
      newimages[i].onload=function(){
          imageloadpost()
      }
      newimages[i].onerror=function(){
        imageloadpost()
      }
  }
  return { //return blank object with done() method
      done:function(f){
          postaction=f || postaction 
          //remember user defined callback functions to be  called when images load
    }
  }
}

链接到作者的页面:http://www.javascriptkit.com/javatutors/preloadimagesplus.shtml

3 个答案:

答案 0 :(得分:2)

你可以为postaction输入你自己的函数,虽然它不是你想象的回调函数。

但是,它返回一个带有done函数的对象。

如果你做的话。像

 preloadimages().done(function () {
     console.log('done')
 });

您的功能将被执行。如果你没有提供fnction作为done的参数,那么默认的postaction将被调用并且什么都不做,因为它是一个空函数

答案 1 :(得分:1)

通过阅读该代码,您似乎并不打算重新定义postaction() - 事实上,您根本不必修改任何此代码。实际上,您希望将函数作为参数传递给done()函数,稍后将在成功加载图像时调用该函数(回调&#39;函数)。

这一行:

postaction=f || postaction
如果 f 有值,

表示&#34;将 f 的值分配给 postaction ,否则指定 postaction 对自己&#34; (即不要改变它)。

答案 2 :(得分:1)

我不知道这个代码究竟用于什么,但返回的对象有一个完成的函数,可以使用或不使用函数参数。

在完成之后,这句话

f || postaction

含义f OR postaction返回f如果f不为null / undefined或postaction,那么如果你调用

myreturnObject.done();

这评估为

postaction = postaction

因为f未定义。如果你打电话

myreturnObject.done(function(newImages) { ... });

这评估为

postaction = f.

然后在imageLoadPost函数的for循环中使用Postaction。如果你想在那里有一些自己的编码,你可以将它作为参数传递给done方法,如图所示。如果您不需要任何其他编码,请不要将函数传递给postaction。然后将调用定义为回退的空事后处理函数。