JS无处不在的——对象

100 阅读2分钟

1、对象的定义: 在JavaScript中,对象是以键值对为元素的无序复合数据集合

2、创建对象的3种方式:

2-1: 通过字面量,如:

var obj = {
	a: '七鸽'cando:function(){}
}

JavaScript允许属性后绑定,也就说在创建对象的时候,不需要定义好属性。可以在任何时候给对象新增属性。以上代码等价于以下代码,如:

var obj={}
obj.a='七鸽'
obj.cando=function(){}

2-2: 通过Object.create()创建对象,create方法可以接收2个参数,第一个参数,表示以第一个参数为对象原型,第二参数,可选,不填表示创建空对象,填写表示创建一个以该对象属性为元素的对象:

var obj1={}
var obj2=Object.create({})
var obj3=Object.create(Object.prototype)
//obj1、obj2、obj3这个3对象是完全等价的
var obj4={a:'七鸽'}
var obj5=Object.create({},obj4)
var obj6=Object.create(Object.prototype,obj4**)**

2-3:通过new 关键字创建对象

function Car() {
	this.color = 'red'
}
var car = new Car;//等价于var car = new Car() 

3、通过new关键字创建对象,this是什么 ,new关键字有做了什么呢?

3-1:在new Car执行之前,Car构造函数进行预编译,JS擎根据new关键字调用函数,就在该函数的内部,通过Object.create({})生成一个空对象,用this来保存这个对象, 并且通过this.proto.constructor=arguments.callee来添加一个构造器,指向当前函数,Car函数的执行期上下文AO如下:

 AO={
 	this:{}
 }
 Go:{
 car:undefined
 }
 

3-2:Car函数开始执行,通过属性后绑定的方式给this对象添加color属性,,此时执行期上下文的AO如下:

AO={
 	this:{color:'red}
 }

3-3: Car数执行完之后,返回this对象的引用地址赋值给变量car,此时GO:

Go:{
 car:this
 }

3-4: 由于this是JavaScript的关键字,以下代码通过that来代替this。以下代码通过函数的普通调用,模拟new关键字执行构造函数的过程:

function Car() {
	var that = Object.create({});
	that.__proto__.constructor = arguments.callee;
	that.color = 'red'
	return that
}
var car2 = Car()

3-5 通过以上代码,可以知道,JS引擎跟new 关键字为程序员做的3件事:

1、 创建一个继承Object的空对象this;

2、 给这个this对象的原型__proto__添加一个构造器,指向当前函数;

3、 把this对象的引用地址返回给调用者。

1642244926(1).jpg