细说JS系列(二十九)—创建对象

68 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第29天,点击查看活动详情

铃铛说点题外话

一句话前情回顾:await是会阻塞事件循环的

一句话介绍今天:创建对象的方式和原型、原型链

铃铛说正文

image.png

创建对象的方式

  1. 方式一:字面量
var obj1 = {name: "xiaobai"}
var obj2 = new Object(name: "xiaobai")

第一种方式是通过字面量的方式创建的;第二种方式是通过内置的构造函数创建的。

  1. 通过自定义的构造函数
var M = fucntion () {
  this.name = name
}

var obj3 = new M("xiaobai")
  1. Object.create()
var person = {name: "xiaobai"}
var obj4 = Objcet.create(person)

第三种方法我们日常其很少用,但是在这种方式里面,obj4是实例,person是obj4的原型

上面的创建方式其实还有点秘密:

  1. var a = {}其实是var a = new Object()的语法糖
  2. var a = []其实是var a = new Array()的语法糖
  3. function foo(){} 其实var foo = new Function()的语法糖

原型、构造函数、实例、原型链

构造函数

任何一个函数,如果在前面加了一个new,通过new关键字生成实例,那么这个函数就是构造函数。

  1. 构造函数通过new关键字生成实例
  2. 构造函数也是函数,构造函数的prototype指向原型。这里需要注意一点:所有的函数的都有prototype指向原型。但是实例没有prototype属性。
  3. 原型对象中constructor,它指向该原型的构造函数。

上面这个三条我们也可以用代码展现出来

var Foo = function (name) {
      this.name = name;
  }

  var fn = new Foo('smyhvae');

这里的构造函数是Foo,通过new关键字生成的fn就是实例对象。Foo.prototype.constructor === Foo的结果返回true

我们也可以用下面这张图更加清晰明了的展示他们三之间的关系。

image.png

跟铃铛说再见

学习的最后一步:放松

今日冷笑话:葬礼完毕,女友安慰新寡妇道:“不要往坏的一面想,应该想想好的一面。新寡妇想了一会儿说:“这是20年来我第一次知道他晚上在哪里过。”

放松结束,猜猜明天会说讲些什么吧