持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第29天,点击查看活动详情
铃铛说点题外话
一句话前情回顾:await是会阻塞事件循环的
一句话介绍今天:创建对象的方式和原型、原型链
铃铛说正文
创建对象的方式
- 方式一:字面量
var obj1 = {name: "xiaobai"}
var obj2 = new Object(name: "xiaobai")
第一种方式是通过字面量的方式创建的;第二种方式是通过内置的构造函数创建的。
- 通过自定义的构造函数
var M = fucntion () {
this.name = name
}
var obj3 = new M("xiaobai")
- Object.create()
var person = {name: "xiaobai"}
var obj4 = Objcet.create(person)
第三种方法我们日常其很少用,但是在这种方式里面,obj4是实例,person是obj4的原型。
上面的创建方式其实还有点秘密:
- var a = {}其实是var a = new Object()的语法糖
- var a = []其实是var a = new Array()的语法糖
- function foo(){} 其实var foo = new Function()的语法糖
原型、构造函数、实例、原型链
构造函数
任何一个函数,如果在前面加了一个new,通过new关键字生成实例,那么这个函数就是构造函数。
- 构造函数通过new关键字生成实例
- 构造函数也是函数,构造函数的prototype指向原型。这里需要注意一点:所有的函数的都有prototype指向原型。但是实例没有prototype属性。
- 原型对象中constructor,它指向该原型的构造函数。
上面这个三条我们也可以用代码展现出来
var Foo = function (name) {
this.name = name;
}
var fn = new Foo('smyhvae');
这里的构造函数是Foo,通过new关键字生成的fn就是实例对象。Foo.prototype.constructor === Foo的结果返回true
我们也可以用下面这张图更加清晰明了的展示他们三之间的关系。
跟铃铛说再见
学习的最后一步:放松
今日冷笑话:葬礼完毕,女友安慰新寡妇道:“不要往坏的一面想,应该想想好的一面。新寡妇想了一会儿说:“这是20年来我第一次知道他晚上在哪里过。”?
放松结束,猜猜明天会说讲些什么吧