【发布时间】:2019-07-18 13:44:31
【问题描述】:
考虑这个函数:
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 中函数和对象的实现方式感到困惑。
【问题讨论】:
-
请注意“对象”(概念)和函数“对象”之间存在差异。在 JavaScript 中,所有函数都是对象,包括“对象”。另一方面,并非所有对象都是函数(例如
var a = {}) -
不过,您正在这样做:
Object.__proto__=> 您从Object获得属性__proto__,这是一个function,因此是一个object。 -
你完全可以做到,例如。
Foo.a = 5。但请注意,这与您在函数内部 声明的变量无关。函数的内容只是与函数关联的一段代码,它的范围不是你所指的“对象”部分。 -
你在测试中搞砸了一些东西。将属性添加到函数是完全合法的并且正在努力。比如jQuery的
$是一个函数,但是你可以调用它的一些方法,比如$.each()。 -
只是为了确定,请参阅another fiddle = )。
标签: javascript prototype