我正在阅读此链接JavaScript_syntax
这似乎是循环的——每个函数都是一个对象,每个对象本身都是一个函数。哪个是原子的?有人可以以更好的方式解释吗?
我正在阅读此链接JavaScript_syntax
这似乎是循环的——每个函数都是一个对象,每个对象本身都是一个函数。哪个是原子的?有人可以以更好的方式解释吗?
任何不是原始类型(未定义、空值、数字、字符串、布尔值)的东西都是 JavaScript 中的对象(或实例)。这意味着function
继承自object
.
对象实例可以包含更多可以是函数的实例。这就是我们所说的“方法”(因为它有一个自动this
变量)。
由于您不能“调用”每个 Object 实例,因此并非每个对象都是一个函数。
我认为这个概念经常被误解。
一个可视化 JS 类型关系的实用程序http://jstype.herokuapp.com/#/home
var foo = { };
var foo = [1, 2, 3];
var foo = function abc() { return "hello world"; };
var foo = new Number(30);
var foo = new String("Hello World");
var foo = new Boolean(true);
var foo = new RegExp(/[foo]+/);
// All 'foo` are object.
所有原始类型都有相应的构造函数wiz。Array, Number, String, Boolean, RegExp
. 由于所有函数都是对象,因此它们也是对象。所以我们可以称它们为构造函数对象。
大多数非原始类型具有prototype
所有继承的东西都存在的属性。数学没有原型。
继承自 的所有对象都Object.prototype
继承自null
。
object <- Object.prototype <- null
所有原生函数都继承自 Function.prototype,后者继承自 Object.prototype。
function <- Function.prototype <- Object.prototype <- null
数组Array.prototype
继承自Object.prototype
。
array <- Array.prototype <- Object.prototype <- null
必须阅读MDN:继承和原型链
弄糊涂Stackoverflow:JavaScript 中的原型
Stack Overflow:函数原型解释
每个函数都是一个对象。对象可以包含函数(方法),但对象不一定是函数。
也Function
始终是 的属性object
。
这意味着 JavaScript 中的所有函数总是绑定到一个对象。如果你没有指定一个对象来绑定一个函数到它绑定到的窗口对象(也称为全局函数)
..弗雷德里克
最好说在 JavaScript 中一切都可以被视为对象,包括原始类型和函数类型;JavaScript 解释器所做的是,当您与它们交互时,它会自动将您的原语和函数提升为它们的对象包装器类型。
还有一个 Function 对象,它是 JavaScript 中其他原语的许多等效包装器,这意味着您甚至可以在函数实例上调用方法,例如:
myFunction(someArg).call(this)
话虽如此,并非每个对象实际上都是一个函数。