Is `Object` a function in JavaScript?(`Object`是JavaScript中的函数吗?)
问题描述
考虑此函数:
function Foo(){
var a = "3";
};
根据__proto__ VS. prototype in JavaScript,
Foo.__proto__ = Function.prototype
Function.prototype.__proto__ = Object.prototype
我理解这一部分,但如果我在Google Chrome控制台中执行此操作:
Object.__proto__
output: ƒ () { /* native code */ }
Function.__proto__
output: ƒ () { /* native code */ }
Q1:为什么它们指向函数?Function
和Object
到底是什么,有什么区别,因为Object
实际上是一个函数?:
typeof Object
"function"
q2:如果在JavaScript中一切都是对象,那么为什么Object
是函数?另外,函数实际上是如何在JavaScript中实现的呢?在函数中声明的变量会发生什么情况?函数是否被JavaScript编译器转换为对象?
抱歉,如果我错过了一些明显的东西。我真的被函数和对象在JavaScript中的实现方式搞混了。
推荐答案
您似乎混淆了"对象"(数据结构)和Object
(函数)。
对象是JavaScript中的一个概念,是某些数据的通用容器。对象包含具有键和关联值的属性。
在JavaScript中,除primitive以外的所有内容都是对象。这包括函数,它基本上是一种特殊类型的对象,可以使用()
语法"调用"。
JavaScript提供了许多具有各种用途的内置函数。两个这样的函数恰好被称为Object
和Function
。因此,换句话说,Object
是一个函数,因此也是一个"对象"(数据结构)。
以您的函数Foo
为例:
function Foo() {
var a = "3";
}
Foo
是一个函数。这意味着Foo
可以被调用,例如。var f = Foo()
。在这种情况下,f
将为undefined
,因为Foo
不返回任何内容。
因为Foo
是函数,所以它也是对象。这意味着我们还可以从其中添加和读取属性:
Foo.bar = 5;
Foo.bar++;
console.log(Foo.bar); // prints 6
请注意,Foo
的"对象"部分与函数的内容无关。这意味着您声明的代码(var a = "3"
)是不相关的。您不能以任何方式访问var a
,因为它在您调用函数之前不存在。如果要执行Foo.a
操作,则不是在函数内部操作var a
;而是在对象Foo
上使用属性a
。
但是,您可以反过来访问函数内部Foo
上的属性:
function Foo() {
var a = "3"; // a is local to this scope, you cannot get to it from outside
console.log(a); // prints 3 - local variable a is accessible inside the scope of this function
console.log(Foo.a); // prints 5 - a is a property on object Foo, and is accessible here
}
// var a inside Foo cannot be accessed here
Foo.a = 5;
Foo();
编辑:回复。你在评论中关于"这个"的问题。this
是JavaScript中引用对象的特殊关键字。但是,此对象不是函数本身,它是使用new
关键字new
调用函数时创建的新对象
function Bar() {
this.a = 10;
console.log(this == Bar); // prints false
}
var bar = new Bar();
console.log(bar.a); // prints 10
使用new
关键字调用的函数称为"构造函数"。Object
和Function
都是构造函数的示例,这就是为什么它们的名称以大写字母开头(这是JavaScript中的约定)。
当您使用构造函数创建对象时,该函数的属性prototype
被用作所创建对象的原型(可通过__proto__
访问)。
console.log(bar.constructor == Bar) // prints true
console.log(bar.__proto__ == Bar.prototype) // prints true
this
也用于其他事情,但这是一个广泛的主题,超出了本问题的范围。
这篇关于`Object`是JavaScript中的函数吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:`Object`是JavaScript中的函数吗?


- Fetch API 如何获取响应体? 2022-01-01
- 失败的 Canvas 360 jquery 插件 2022-01-01
- 400或500级别的HTTP响应 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- Flexslider 箭头未正确显示 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- addEventListener 在 IE 11 中不起作用 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01