1。字面量法让obj1={name:'小明',age:18};2。newletobj2=newObject();obj2.name='小明';obj2.age=18;3、Object.create()lettempObejct={sex:'女'};letobj3=Object.create(tempObejct,{name:{value:'小明',writeable:true,configurable:true,enumerable:true},age:{value:18,writeable:true,configurable:true,enumerable:true}});console.log(obj3);//{name:'小明'}console.log(obj3.sex);//'Female'Object.create()第一个参数放在新对象的原型上。第二个参数是可选的,放在新对象的实例上,但需要以属性描述对象的形式进行描述。当使用构造函数newObject()或对象字面量方法创建一个空对象时,该对象具有prototype属性,即proto。使用Object.create()方法创建空对象时,该对象没有原型属性。4.构造函数模式函数Person4(name,age){this.name=name;这个。年龄=年龄;this.sleep=function(){console.log(this.name+'sleep')}}letobj4=newPerson4('小明',18);console.log(obj4);//Person{name:'小明',age:18}obj4.sleep();//小明sleep的优点:各个实例的引用类型相互隔离缺点:每次创建一个新的对象(实例),都要重新重构方法,耗时耗内存5.原型模式函数Person5(name,age,sleepTime){Person5.prototype.name=name;Person5.prototype.age=年龄;Person5.prototype.sleepTime={time:sleepTime};Person5.prototype.sleep=function(){console.log(name+'sleep');}};letobj51=newPerson5('小明',18,1);console.log(obj51);//Person5{}obj51.sex='female';console.log(obj51);//Person5{性别:'女性'}obj51.sleep();//小明sleepletobj52=newPerson5('小红',18,2);控制台日志(obj51.sleepTime);//{时间:2}console.log(obj52.sleepTime);//{time:2}优点:method共享缺点:每次创建对象(实例)时,它们之间的引用类型会相互污染6.混合模式(构造函数模式+原型模式)鉴于以上两种模式是互补的,可以使用构造函数模式声明实例属性(基本类型和引用类型),而原型模式用于定义方法和共享属性函数Person6(姓名、年龄、性别、睡眠时间){this.name=name;这个。年龄=年龄;this.sleepTime={time:sleepTime}Person6.prototype.sleep=function(){console.log(name+'sleep');}}letobj61=newPerson6('小明',18,'女',1);console.log(obj61);//Person6{name:'小明',age:18,sleepTime:{time:1}}obj61.sleep();//小明sleepletobj62=newPerson6('小红',18,'女',2);console.log(obj61.sleepTime);//{时间:1}控制台。日志(obj62.sleepTime);//{time:2}7.工厂模式是将创建对象的过程进行封装,方便大量创建实例对象。functionPerson7(name,age){varobj=newObject();obj.name=nameobj.age=agereturnobj}letobj71=newPerson7('小明',18);letobj72=newPerson7('小红',18);console.log(obj71);//{name:'小明',age:18}console.log(obj72);//{姓名:'小红',年龄:18}
