2013-03-31 80 views
0

我有以下的代码工作Javascript代码重构

var exif = function(exifObject) { 
    alert(exifObject.Orientation); 
} 

$(this).fileExif(exif); 

问题是,我需要后$(this).fileExif(exif)行警告值。

于是,我试着做以下几点:

function getOrientation(exifObject){ 
    return(exifObject.Orientation); 
} 
getOrientation($(this).fileExif()); 

它不工作。如何在$(this).fileExif(exif)行后获得警报值?

附加信息

console.log(exifObject)返回Object具有属性的阵列,F.E. Orientation

$(this)被包裹在此代码:

$('body').on('change', '#imgFile', function(event) { 

所以它的一个输入类型的文件。

+0

'console.log(exifObject);'的对象输出是什么?你也可以向我们展示包装getOrientation函数的代码,所以我们知道'$(this)'是什么。 – 2013-03-31 09:15:25

+0

在上面添加了其他信息,谢谢! –

+0

我认为这是不可能的,因为你的exif()函数被调用到fileExif()调用中。但我不确定你想做什么,所以也许我错了。 – sgmonda

回答

0

您正在向fileExif函数传递exif这是一个函数。这是一个例子,其中函数是JavaScript中的第一类对象,在这种情况下,exif是一个“回调”函数。也就是说,当fileExif函数完成时,它将结果传递给exif函数,然后调用该函数。

在执行方面,alert将在fileExif函数之后调用。但是,如果你拼命想要的功能之后要写入的代码,你可以为你传递声明函数:

$(this).fileExif(function(exifObject) { 
    alert(exifObject.Orientation); 
}); 

然而,这可能不是原来的一样清晰。

+0

谢谢!所以我想在函数之外重用exifObject,我可以将“alert”更改为“return”并捕获返回值,但这不起作用......? –

+0

不,您将不得不调用传递给'fileExif'的匿名函数内的另一个函数,并将'exifObject.Orientation'传递给该函数。 – phenomnomnominal

0

我发现只有一个jQuery的fileExif插件。 Here it sources。 这个插件使用原生FileReader。 FileReader异步加载文件。 你有2种方式。首先 - 修改插件代码并使其同步(坏主意)。用asycn风格编写你的代码(最佳实践)。