最近一直在看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种创建对象方式与优缺点
# 就会
# 第一种
# 我们应该
# 五种
# 方法来
# 第二种
# 第三种
# 出现了
# 的是
# 都是
# 是一个
# 第四种
# 有什么
# 也有
# 都要
# 你要
# 一遍
# 你有
# 我们可以
# 用了
相关文章:
建站主机CVM配置优化、SEO策略与性能提升指南
音响网站制作视频教程,隆霸音响官方网站?
如何注册花生壳免费域名并搭建个人网站?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
C++如何使用std::optional?(处理可选值)
微信小程序 五星评分(包括半颗星评分)实例代码
网站制作软件免费下载安装,有哪些免费下载的软件网站?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
打鱼网站制作软件,波克捕鱼官方号怎么注册?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
建站之星如何实现网站加密操作?
如何快速配置高效服务器建站软件?
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
如何在阿里云完成域名注册与建站?
如何选择高效稳定的ISP建站解决方案?
专业网站建设制作报价,网页设计制作要考什么证?
如何登录建站主机?访问步骤全解析
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
制作门户网站的参考文献在哪,小说网站怎么建立?
简单实现Android文件上传
高端建站如何打造兼具美学与转化的品牌官网?
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
如何通过PHP快速构建高效问答网站功能?
济南专业网站制作公司,济南信息工程学校怎么样?
网站制作难吗安全吗,做一个网站需要多久时间?
三星网站视频制作教程下载,三星w23网页如何全屏?
建站之星安装后如何配置SEO及设计样式?
如何通过远程VPS快速搭建个人网站?
如何构建满足综合性能需求的优质建站方案?
建站之星导航如何优化提升用户体验?
如何用腾讯建站主机快速创建免费网站?
个人网站制作流程图片大全,个人网站如何注销?
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
建站主机选哪家性价比最高?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
javascript基本数据类型及类型检测常用方法小结
平台云上自主建站:模板化设计与智能工具打造高效网站
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
定制建站模板如何实现SEO优化与智能系统配置?18字教程
外贸公司网站制作哪家好,maersk船公司官网?
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
如何快速搭建个人网站并优化SEO?
建站之星安装后界面空白如何解决?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
宝塔面板如何快速创建新站点?
如何快速启动建站代理加盟业务?
相册网站制作软件,图片上的网址怎么复制?
css网站制作参考文献有哪些,易聊怎么注册?
建站三合一如何选?哪家性价比更高?
*请认真填写需求信息,我们会在24小时内与您取得联系。