身为函数语言的js,函数从何而来

Object.prototype

Object.prototype是js中诞生的第一个对象

Function.prototype

Function.prototype通过__proto__继承了Object.prototype,作为Js中诞生的第二个对象,该对象实现了js中的两种类型

js只有object number boolean function undefiend

Function和Object

很多人搞不清楚这两者的关系,确实这个关系比较绕。首先因为有了前面的两个prototype,这两哥们才关联起来了。
图片描述

  • 从上图可以看出Object和Function的原型链是一样的(why)

因为Object和Function是js中最重要的两个构造函数,Object既然是函数,继承Function.prototype就没什么奇怪的了

  • var obj = new Object();var obj = {}

这两个代码是一样的

创建一个空对象{}
将空对象的__proto__赋值Object.prototype
Object.apply({})

  • var fun = new Function();function fun(){};

同上
var fun = function(){};这个和前面两个也是等价的,但是有一个地方不太一样
new file stutent.js
`exports = module.exports = fun;

var fun = function (){

console.log('adf');

};`

在app.js中var student = require('./student'); 得到student为null
目前尚不知道原因


Sike
272 声望18 粉丝