变量“window”代表什么反应原生?

时间:2018-04-19 01:43:04

标签: react-native

我正在查看反应原生获取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;

1 个答案:

答案 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正在做什么,我们可以回到你的问题:

  • Window是一个全局变量,就像您在浏览器Web环境中看到的一样吗?
    • 是的,它是一个全局变量,属性为global,设置为等于global
  • 或者它是否以某种方式代表当前可见的屏幕?
    • 不。它代表了React Native希望它代表的任何东西。
  • 下面的代码示例是替换/覆盖全局对象吗?
    • 是。它已使用react-native-fetch-blob自己的实现替换window.XMLHttpRequestwindow.Blob