我正在查看反应原生获取blob https://github.com/joltup/react-native-fetch-blob的一些代码,我在他们的示例中看到调用window.Blob
等等。
Window是一个全局变量,就像您在浏览器Web环境中看到的一样吗?或者它以某种方式代表当前可见屏幕?下面的代码示例是替换/覆盖全局对象吗?
const Blob = RNFetchBlob.polyfill.Blob;
const fs = RNFetchBlob.fs;
window.XMLHttpRequest = RNFetchBlob.polyfill.XMLHttpRequest;
window.Blob = Blob;
答案 0 :(得分:4)
React Native定义了一些全局变量(全部在global
下),这些全局变量是polyfilled的,因此可以使用最初为浏览器开发的某些库而不会失败。熟悉的浏览器API的大多数填充都是空的。您可以在InitializeCore.js
中看到它们。
window
虽然不是空的。它设置为global
:
if (global.window === undefined) {
global.window = global;
}
接下来的问题是,Blob
中的global
是什么?
Blob
是使用polyfillGlobal
函数added to global
的属性。如果您对其工作原理感到好奇,可以查看PolyfillFunctions.js
文件。 Blob
本身已在Blob.js
中定义。
polyfillGlobal('Blob', () => require('Blob'));
现在我们看到React Native正在做什么,我们可以回到你的问题:
global
,设置为等于global
。window.XMLHttpRequest
和window.Blob
。