javascript规范是否保证所有内置静态方法都可以作为函数调用(没有接收器)

问题描述 投票:2回答:1

例如,Array.from被称为方法,但Array.isArray被称为函数

https://www.ecma-international.org/ecma-262/8.0/index.html#sec-properties-of-the-array-constructor

在实践中,它们都可以作为函数调用(const arrFrom = Array.from; arrFrom('string');),但是规范是否保证所有静态内置函数或某些或者没有?

javascript
1个回答
3
投票

不,没有保证。每种静态方法都有所不同。

对于任何给定的内置静态方法,查找其规范,如果它不引用this,则它是一个函数。

  • Object:没有一个静态Object方法依赖于它们的接收器,它们不使用Object构造函数,而只是操作它们的参数或创建一个新的普通对象。
  • FunctionGeneratorFunctionAsyncFunctionBooleanErrorsRegExpMapWeakMapSetWeakSetSharedArrayBufferDataView:这些构造函数都不包含任何静态方法
  • Symbol:没有一个静态Symbol方法依赖于他们的接收器,他们不使用Symbol构造函数
  • NumberDate:他们的静态方法都不依赖于他们的接收器,他们只是操作他们的参数并返回一个原始数字。
  • String:没有一个静态String方法依赖于它们的接收器,它们不使用String构造函数,而只是操作它们的参数并返回一个原始字符串。
  • ArrayisArray只返回一个布尔值 fromof:这些确实依赖于它们的接收器值,但是当它不是构造函数时,它们会回到默认的Array上。这可能是为了向后兼容Array不可扩展的时候。
  • 类型化数组:它们没有静态方法on their own,但是从common intrinsic object继承它们 fromof:这些依赖于他们的接收器值是一个返回类型数组的构造函数
  • ArrayBufferisView只返回一个布尔值
  • MathAtomicsJSONReflect:无论如何,他们不是构造函数,他们的“方法”只是不依赖于接收者的命名空间函数
  • Promiseallracerejectresolve:这些依赖于他们的接收器值是一个像Promise一样工作的构造函数
  • Proxy并不是真正设计为可子类化的,它甚至不需要是构造函数。 revocable:不依赖于它的接收器

所以一般来说,大多数静态“方法”都只是命名空间函数,完全忽略了它们的接收器。然而,有一些方法返回它们被调用的构造函数的实例,最值得注意的是promise和(typed)数组方法,它们需要相应的接收器。 ObjectArray是例外。

© www.soinside.com 2019 - 2024. All rights reserved.