JS对象创建的几种方式整理

发布时间 - 2026-01-10 23:20:19    点击率:

最近一直在看JS高级程序设计这本书,有空来梳理一下几种创建对象的方式。话不多说,直接步入正题。

第一种:Object构造函数创建

var Person = new Object();
Person.name = 'Nike';
Person.age = 29;

这行代码创建了Object引用类型的一个新实例,然后把实例保存在变量Person中。

第二种:使用对象字面量表示法

var Person = {};//相当于var Person = new Object();
var Person = {
 name:'Nike';
 age:29;  
}

对象字面量是对象定义的一种简写形式,目的在于简化创建包含大量属性的对象的过程。也就是说,第一种和第二种方式创建对象的方法其实都是一样的,只是写法上的区别不同

在介绍第三种的创建方法之前,我们应该要明白为什么还要用别的方法来创建对象,也就是第一种,第二种方法的缺点所在:它们都是用了同一个接口创建很多对象,会产生大量的重复代码,就是如果你有100个对象,那你要输入100次很多相同的代码。那我们有什么方法来避免过多的重复代码呢,就是把创建对象的过程封装在函数体内,通过函数的调用直接生成对象。

第三种:使用工厂模式创建对象

function createPerson(name,age,job){
 var o = new Object();
 o.name = name;
 o.age = age;
 o.job = job;
 o.sayName = function(){
  alert(this.name); 
 };
 return o; 
}
var person1 = createPerson('Nike',29,'teacher');
var person2 = createPerson('Arvin',20,'student');

在使用工厂模式创建对象的时候,我们都可以注意到,在createPerson函数中,返回的是一个对象。那么我们就无法判断返回的对象究竟是一个什么样的类型。于是就出现了第四种创建对象的模式。

第四种:使用构造函数创建对象

function Person(name,age,job){
 this.name = name;
 this.age = age;
 this.job = job;
 this.sayName = function(){
 alert(this.name);
 }; 
}
var person1 = new Person('Nike',29,'teacher');
var person2 = new Person('Arvin',20,'student');

对比工厂模式,我们可以发现以下区别:

1.没有显示地创建对象

2.直接将属性和方法赋给了this对象

3.没有return语句

4.终于可以识别的对象的类型。对于检测对象类型,我们应该使用instanceof操作符,我们来进行自主检测:

alert(person1 instanceof Object);//ture
alert(person1 instanceof Person);//ture
alert(person2 instanceof Object);//ture
alert(person2 instanceof Object);//ture

同时我们也应该明白,按照惯例,构造函数始终要应该以一个大写字母开头,而非构造函数则应该以一个小写字母开头。

那么构造函数确实挺好用的,但是它也有它的缺点:

就是每个方法都要在每个实例上重新创建一遍,方法指的就是我们在对象里面定义的函数。如果方法的数量很多,就会占用很多不必要的内存。于是出现了第五种创建对象的方法

第五种:原型创建对象模式

function Person(){}
Person.prototype.name = 'Nike';
Person.prototype.age = 20;
Person.prototype.jbo = 'teacher';
Person.prototype.sayName = function(){
 alert(this.name);
};
var person1 = new Person();
person1.sayName();

使用原型创建对象的方式,可以让所有对象实例共享它所包含的属性和方法。

如果是使用原型创建对象模式,请看下面代码:

function Person(){}
Person.prototype.name = 'Nike';
Person.prototype.age = 20;
Person.prototype.jbo = 'teacher';
Person.prototype.sayName = function(){
 alert(this.name);
};
var person1 = new Person();
var person2 = new Person();
person1.name ='Greg';
alert(person1.name); //'Greg' --来自实例
alert(person2.name); //'Nike' --来自原型

当为对象实例添加一个属性时,这个属性就会屏蔽原型对象中保存的同名属性。

这时候我们就可以使用构造函数模式与原型模式结合的方式,构造函数模式用于定义实例属性,而原型模式用于定义方法和共享的属性

第六种:组合使用构造函数模式和原型模式

function Person(name,age,job){
 this.name =name;
 this.age = age;
 this.job = job;
}
Person.prototype = {
 constructor:Person,
 sayName: function(){
 alert(this.name);
 };
}
var person1 = new Person('Nike',20,'teacher');

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# js创建对象的方式  # js中对象的创建方式  # js对象创建方式  # JavaScript 三种创建对象的方法  # JS 创建对象(常见的几种方法)  # JavaScript 创建对象  # js中创建对象的几种方式示例介绍  # js创建对象的几种常用方式小结(推荐)  # javascript转换字符串为dom对象(字符串动态创建dom)  # JavaScript中创建字典对象(dictionary)实例  # js创建对象的方法汇总  # js中常见的4种创建对象方式与优缺点  # 就会  # 第一种  # 我们应该  # 五种  # 方法来  # 第二种  # 第三种  # 出现了  # 的是  # 都是  # 是一个  # 第四种  # 有什么  # 也有  # 都要  # 你要  # 一遍  # 你有  # 我们可以  # 用了 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: C++用Dijkstra(迪杰斯特拉)算法求最短路径  如何彻底删除建站之星生成的Banner?  Laravel Session怎么存储_Laravel Session驱动配置详解  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  如何在阿里云服务器自主搭建网站?  如何快速搭建支持数据库操作的智能建站平台?  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  python中快速进行多个字符替换的方法小结  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  php json中文编码为null的解决办法  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  MySQL查询结果复制到新表的方法(更新、插入)  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  Python文件流缓冲机制_IO性能解析【教程】  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  Laravel storage目录权限问题_Laravel文件写入权限设置  成都网站制作公司哪家好,四川省职工服务网是做什么用?  如何在七牛云存储上搭建网站并设置自定义域名?  如何在香港服务器上快速搭建免备案网站?  ,交易猫的商品怎么发布到网站上去?  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  Android GridView 滑动条设置一直显示状态(推荐)  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  详解jQuery停止动画——stop()方法的使用  深入理解Android中的xmlns:tools属性  Laravel如何使用Livewire构建动态组件?(入门代码)  javascript中的try catch异常捕获机制用法分析  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  香港服务器网站卡顿?如何解决网络延迟与负载问题?  Android Socket接口实现即时通讯实例代码  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  如何用搬瓦工VPS快速搭建个人网站?  进行网站优化必须要坚持的四大原则  如何在IIS7上新建站点并设置安全权限?  青岛网站建设如何选择本地服务器?  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  详解MySQL数据库的安装与密码配置  如何在香港免费服务器上快速搭建网站?  如何在万网ECS上快速搭建专属网站?  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  如何快速辨别茅台真假?关键步骤解析  Laravel如何实现用户密码重置功能?(完整流程代码)  太平洋网站制作公司,网络用语太平洋是什么意思?  使用spring连接及操作mongodb3.0实例  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解