基础-原型与原型链的纠葛(1)

81 阅读1分钟

PS: 总结下相关知识点。

  • 所有对象都是new 函数出来的。{}只是语法糖。

image.png

比如说,

function obj(){
  return {}
}
const newObj = new obj();

那这个对象newObj是通过new一个函数产生的,还是通过new一个对象产生的? 有人说这不明显吗?就是new了obj这个函数产生的啊。我们都知道new的这个函数是构造函数,那这个构造函数是obj吗?

image.png 看到了,这个构造函数是Object。所以实际上是通过 new Object 产生的,这也就说通了{}是语法糖,实际的操作是new Object

function obj() {
  return new Object();
}

如果不 return,那实际new的就是obj这个函数,那得到的就是一个对象,这个构造函数是obj

  • 所有的函数也是对象。

    函数呢,本质上是通过new一个Function构造函数产生的。

    对于Function就涉及到是先有鸡还是先有蛋的问题,函数是对象,也是通过new产生的,那Function呢?它比较特殊,是直接存放在内存里的。在js引擎启动的时候,直接把它放到内存里。

image.png 而对于ObjectArray,首字母大写嘛,所以很明显是个构造函数。

image.png

另外函数的本质 是对象,所以函数里面是可以有属性的。例如Array.isArray()Number.isNaN()

  • 所有对象都是引用类型

    保存的是地址,赋值的也是地址。