每个对象都是一个函数,每个函数都是对象 - 哪个是正确的?

gek*_*ish 45 javascript

我正在读这个链接JavaScript_syntax

这似乎是循环的 - 每个函数都是一个Object,每个Object本身都是一个函数.哪个是原子的?有人能以更好的方式解释吗?

Aar*_*lla 55

  1. 任何非原始类型(undefined,null,number,string,boolean)都是JavaScript中的对象(或实例).这意味着function继承自object.

  2. 对象实例可以包含更多可以是函数的实例.这就是我们所说的"方法"(因为它有一个自动this变量).

  3. 由于您无法"调用"每个Object实例,因此并非每个对象都是函数.

  • 函数是`Function`的实例(可能*从*Object继承*),如OP的链接文章中所述:http://en.wikipedia.org/wiki/JavaScript_syntax#Function (8认同)
  • @ gurupriyan.e:试试这个:`var obj = {}; obj();`那是"试图调用对象"(即使用它就像它是一个函数).不行.因此,任意对象不是函数. (7认同)

Roh*_*hit 16

我认为这个概念经常被误解.

可视化JS类型关系的实用程序http://jstype.herokuapp.com/#/home

Javascript数据类型

  1. 原始类型 - 数字,字符串,布尔值,null和undefined.
  2. 所有非基本类型都是对象:

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. 
Run Code Online (Sandbox Code Playgroud)

  1. 所有原始类型都有相应的构造函数 wiz.Array, Number, String, Boolean, RegExp.由于所有函数都是对象,因此它们也是对象.所以我们可以称它们为构造函数对象.

  2. 大多数非原始类型具有prototype所有继承的东西都存在的属性.数学没有原型.

  3. 所有对象都继承自Object.prototype继承自的对象null.
    object <- Object.prototype <- null

  4. 所有本机函数都继承自Function.prototype,该函数继承自Object.prototype.
    function <- Function.prototype <- Object.prototype <- null

  5. 数组继承自的Array.prototype继承Object.prototype.
    array <- Array.prototype <- Object.prototype <- null

必须阅读MDN:继承和原型链
混淆Stackoverflow:JavaScript中的原型
Stack Overflow:函数原型解释


Dan*_*uis 8

每个函数都是一个对象.对象可以包含函数(方法),但对象不是必需的函数.


fre*_*rik 6

也是Function一个属性object.

这意味着JavaScript中的所有函数始终绑定到对象.如果你没有指定一个对象绑定一个函数,它绑定到window对象(也称为全局函数)

..fredrik