js高级_118、对象的创建模式
方式一:object构造函数模式
套路:先创建空object对象,再动态添加属性/方法。
使用场景:起始时不确定对象内部的数据。
缺点:语句太多。
var person=new Object();
person.name='tom';
person.age=18;
person.setName=function(name){
this.name=name;
}
person.setName("ace");
console.log(person.name,person.age);
方式二:对象字面量模式
套路:使用{ }创建对象,同时指定属性/方法。
使用场景:起始时对象内部数据是确定的。
缺点:如果创建多个对象,有重复代码。
var person={
name:"tom",
age:18,
setName:function(name){
this.name=name;
}
};
person.setName("张三");
console.log(person.name,person.age);
如果创建多个对象,有重复代码。比如:要创建一个person2又要写重复的属性方法
方式三:工厂模式
套路:通过工厂函数动态创建对象并返回。函数能返回一个对象,他就是工厂函数。
使用场景:需要创建多个对象。
问题:对象没有一个具体的类型,都是object类型。
这样创建多个对象就不用写重复的代码
function createPerson(name,age){
var obj={
name:name,
age:age,
setName:function(name){
this.name=name;
}
}
return obj;
}
//创建2个对象
var p1=createPerson("张三",18);
var p2=createPerson("王五",19);
缺点:创建出来的对象没有具体的类型,比如,再创建一个student的工厂
那么,它们都是object类型
方式四:自定义构造函数模式
套路:自定义构造函数,通过new创建对象。
使用场景:需要创建多个类型确定的对象。
缺点:每个对象都有相同的数据,浪费内存。
这样要为实例的对象创建属性必须在其内部加上this关键字。内部的this代表这个函数的实例对象。
//定义类型
function Person(name,age){
this.name=name;
this.age=age;
this.setName=function(name,age){
this.name=name;
}
}
//创建实例
var p1=new Person("张三",18);
//创建实例
var p2=new Person("李四",20);
console.log(p1,p2)
这样就能创建不同类型的对象
缺点就是他们中的方法浪费内存,因为每个对象都有一个,对象里的方法都是单独的存在的。
方式五:构造函数+原型的组合模式
套路:自定义构造函数,属性在函数中初始化,方法添加到原型上。
使用场景:需要创建多个类型确定的对象。
//定义类型
function Person(name,age){//在构造函数中只初始化一般属性
this.name=name;
this.age=age;
}
Person.prototype.setName=function(name,age){
this.name=name;//this是实例对象。
}
//创建实例
var p1=new Person("张三",18);
//创建实例
var p2=new Person("李四",20);
console.log(p1,p2)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南