javascript原型对象

90 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天,点击查看活动详情

类型与对象

在JavaScript里6种常见的基本类型和9种引用类型,引用类型都是我们常说的对象

基本类型:string,number,boolean,object,null,undefined

引用类型:String,Number,Boolean,Object,Function,Array,Date,RegExp,Error

创建对象一般通过声明或者构进行创建的,比如用两种形式创建了两个对象,然后在控制台直接输入这两个属性并回车,就会出现一个箭头,可以看到这个对象包含的属性,点看可以看到下面有一个proro,这个proro也是对象的一个属性叫原型对象,在对象创建的时候就生成了

图片.png

原型对象

那么这个原型对象是用来干嘛的?用三个引用类型创建三个不同的对象然后在控制台输入对象名

图片.png

a对象的原型是String,b的原型是Number,C的原型是Object,继续点击箭头查看这三个对象的原型,可以到看到Object没有proto属性,StringNumber有proto属性并指向Object,继续展开就没有proto属性了

图片.png

所以每当新对象创建的时候除了各自的属性以外还有一个隐式的proto属性,这个属性会指向各自的原型对象,而原型对象也有自己的proto属性指向原型对象,但是最终都会指向Object,所以才会经常听见万物皆对象这句话

其实在创建的时候还有一个属性叫prototype,这个prototypeproto是全等的指向同一个原型对象

图片.png

整个关系就比较清晰了,a,b,c有proto属性指向原型对象,构造a,b,c的对象有prototype属性指向原型对象,原型对象有constructor指向构造a,b,c的对象

js new一个对象的过程

创建一个构造函数,和一个变量,变量作为构造函数的示例

function Mom(name){
    this.name=name
}
var son=new Mon('tony')

从new 开始创建了一个对象,这个对象就会被执行prototype连接,就是son.proto=Mon.prototype,然后对象会和函数调用的this绑定起来,执行构造函数中的代码为对象添加属性,相当于son.name='tony',最后如果函数没有返回值的话,就会自动返回这个对象