当前位置: 首页 > Web前端 > JavaScript

在JavaScript中创建对象的多种方法

时间:2023-03-27 18:18:28 JavaScript

方法一——字面量创建letobj={name:'zhang',age:12,sayName:function(){console.log(this.name);}}console.log(obj);//{name:'zhang',age:12,sayName:[Function:sayName]}方法二——用函数模拟无参构造函数Person(){}//定义一个函数,如果使用new“实例化”,这个函数可以看作是一个Classletperson=newPerson()//给person对象实例添加属性person.name='zhang'person.age=13person.sayName=function(){console.log(this.age);}console.log(person);//Person{name:'zhang',age:13,sayName:[Function(anonymous)]}方法3----自定义构造函数(带参数)functionDog(name,age,color){this.name=namethis.age=agethis.color=colorthis.sayName=function(){console.log(this.name);}}letdog1=newDog('luky',2,'yellow')console.log(dog1);//Dog{name:'luky',age:2,color:'yellow',sayName:[Function(anonymous)]}dog1.sayName()//luky//添加到全局对象。在节点环境中,全局对象是全局的。在浏览器执行环境中,全局对象为windowDog('lily',3,'black')global.sayName()//lily//window.sayName()//lily//只有在浏览器中执行才会有输出结果//调用指针的实现示例://在另一个对象的范围内调用//创建一个新对象letobjCall=newObject()Dog.call(obj,'小七',2,'gold')obj.sayName()//小七console.log(obj.color);//黄金方法4----使用工厂函数创建对象.gender=性别person.sayName=function(){console.log(this.name);}returnperson}letperson1=createPerson('zhang',18,'male')console.log(person1);//{name:'zhang',age:18,gender:'male',sayName:[Function(anonymous)]}person1.sayName()//zhang方法5----使用组合模式(构造函数模式和原型mode)创建对象//将私有属性和方法放在构造函数中dehua']}//存储原型对象中Person的公共属性和方法.prototype重写后指向Object,而不是原来的PersonPerson.prototype={//让constructor属性指向Personconstructor:Pig,sayName:function(){console.log(this.name);}}//创建对象实例letp1=newPig('小香',1,'apple')letp2=newPig('小芳',3,'炸鸡');console.log(p1);//Pig{name:'Xiaoxiang',age:1,hobby:'Apple',friends:['Liuwei','Dehua']}//改变其中一个实例p1.friends.push('robin');//实例间的私有属性互不影响console.log(p1.friends);//['刘伟','德华','robin']log(p2.friends);//['刘维','德华']