gpt4 book ai didi

javascript - 为什么有些 JavaScript 构造函数不是函数?

转载 作者:数据小太阳 更新时间:2023-10-29 03:53:54 24 4
gpt4 key购买 nike

澄清:
“JavaScript constructor”应该更恰本地写成“javascript constructor”,以强调所考虑的构造函数不仅是原生 JavaScript 语言的构造函数,如 Object、Array、Function 等,还包括 JavaScript 语言定义之外的其他构造函数但是对于浏览器来说是固有的,例如 XMLHttpRequest,“JavaScript”这个词的意思是表示这些构造函数是使用 JavaScript 表达和访问的。

一些引用:

在修辞上,有对构造函数函数的引用,但不是构造函数对象!

(表面上,这是因为对象是函数,而函数是对象!
Why in JavaScript is a function considered both a constructor and an object?
更具体地说,对象,或者是 obj-eggs?,是,忽略文字实例,函数和函数的实例化是函数的对象实例。事实证明,功能是对象存在的基础是有争议的
7. Functions
先于
8. Working with Objects
在 MDN 文档中 JavaScript Guide .我反对第 8 节!它提供了使用构造函数和函数实例化创建对象所需的详细信息!)

为什么接口(interface) DOM 的构造函数不是函数?

javascript:
alert([
"using browser environment: \n"+window.navigator.userAgent,
Option, Image, Audio,
Storage, XMLHttpRequest, Worker, FileReader,
] . join("\n\n"));

向我们展示:

using browser environment:
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3

[object Option]

[object Image]

[object Audio]

[object Storage]

[object XMLHttpRequest]

[object Worker]

[object FileReader]

但是……

javascript:
alert([
XPCNativeWrapper,
].join("\n\n"));

(产生

function XPCNativeWrapper() { [native code] }

)

和 JavaScript 语言 constructors是函数。

javascript:
alert([
"using browser environment: \n"+window.navigator.userAgent,
Array, Boolean, Date, Function,
Number, Object, RegExp, String,
Error, Iterator,
].join("\n\n"));

给我们:

using browser environment:
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3

function Array() { [native code] }

function Boolean() { [native code] }

function Date() { [native code] }

function Function() { [native code] }

function Number() { [native code] }

function Object() { [native code] }

function RegExp() { [native code] }

function String() { [native code] }

function Error() { [native code] }

function Iterator() { [native code] }

最佳答案

首先:

Objects ARE functions

不,它们不是:

> a = function() {}
function () {}
> a instanceof Object
true
> b = {}
Object
> b instanceof Function
false

toString 方法(这是在进行字符串连接时调用的方法)不是获取对象信息的可靠方法。如果我使用 typeof,我会得到以下结果:

using browser environment:  
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:5.0.1) Gecko/20100101 Firefox/5.0.1

function

function

function

object

function

function

function

所以你看,除了 Storage 之外,它们中的大多数,都是实际起作用的(为什么它不适用于 Storage,我不知道不知道)。

另请记住,DOM 接口(interface)的行为可能与原生 JavaScript 对象不同。

另一方面,在 Chrome 中,toString 方法给出了这个:

[object Function] 

[object Function]

[object Function]

function Storage() { [native code] }

function XMLHttpRequest() { [native code] }

function Worker() { [native code] }

function FileReader() { [native code] }

关于javascript - 为什么有些 JavaScript 构造函数不是函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6988064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com