Javascript中的对象和原型(二)


Posted in Javascript onAugust 12, 2016

在上篇文章中JavaScript中的对象和原型(一)提到了JavaScript中对象的创建的一些基本操作,接下来讨论下继续讨论。

一 工厂模式

我们知道,要创建一个对象我们可以用如下代码:

var user = new Object(); //使用new运算符创建一个对象
user.name = '念在三角湖畔'; //给对象添加属性
user.age = 22;
user.address = '湖北武汉';
alert(user.name + " " +user.age);//返回 '念在三角湖畔 湖北武汉'

用这样的方法创建对象比较简单直观,也是JavaScript种创建对象最基本的方法。但是这样就有一个问题,如果我们需要创建多个对象,那么我就得写很多重复的代码。比如我们想创建另一个对象user1,我们就得重新将上面的代码重新写一遍,这在实际开发过程中是不合适的,这样如果对象过多,代码量将大大增加。

为了解决这样的问题,我们可以使用一种叫做工厂模式的方法,这种方法 就是为了解决实例化对象产生大量重复代码的问题。

function create(name, age) {
var obj = new Object(); 

obj.name = name; 

obj.age = age;

obj.run = function () {


return this.name +' '+ this.age;

};

return obj;
}
var obj1= create('ZXC', 10); //第一个实例
var obj2= create('CXZ', 20); //第二个实例
alert(obj1.run());
alert(obj1.run());

 从上面的代码我们可以看出,工厂模式解决了实例化时代码大量重复的问题,但又出现了一个问题,那就是识别问题,我们根本无法弄清楚他们到底是哪个对象的实例。比如

alert(typeof obj1); //Object
alert(obj1 instanceof Object); //true

以上代码标明box1是Object对象,但是我们无法知道具体是哪一个对象创建的。

二 构造函数(构造方法)

为了解决上面的问题,我们可以用构造方法去创建对象。构造函数和普通函数的唯一区别,就是调用的方式不同。但是,构造函数同样是函 数。

function User(name, age) { //构造函数模式
this.name = name;

this.age = age;

this.run = function () {


return this.name + ' '+this.age; 
};
}

创建对象的时候用new运算符就可以了:

var user1= new User('ZXC', 25);
var user2= new User('CXZ', 22);

现在我们就可以检测user1或者user2是不是属于User。

alert(user1 instanceof User);//true 

可见,使用构造函数的方法,即解决了重复实例化的问题,又解决了对象识别的问题。

使用构造函数时执行的过程如下:

1.执行 new 构造函数()时,后台执行了 new Object();

2.将构造函数的作用域给新对象。

3.执行构造函数内的代码;

4.后台直接返回新对象。

接下来我们看看构造函数内部的函数问题。如果我们执行以下语句:

alert(user1.run==user2.run);//结果返回的是false

结果返回的是false,这就说明方法其实也是一种引用地址。如果我们同样重复创建了多个对象,那么每个对象中的方法都会在内存中开辟新的空间,这样浪费的空间就比较多。要解决这个问题,我们就需要用到实例属性或者方法的共享,下一篇文章中将继续探讨解决这个问题。

以上所述是小编给大家介绍的Javascript中的对象和原型(二),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Jquery 一次处理多个ajax请求的代码
Sep 02 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
Mar 14 Javascript
jQuery学习笔记 获取jQuery对象
Sep 19 Javascript
jquery特效 幻灯片效果示例代码
Jul 16 Javascript
在JS中操作时间之getUTCMilliseconds()方法的使用
Jun 10 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
Jul 01 Javascript
jQuery获取Table某列的值(推荐)
Mar 03 Javascript
浅谈JS如何实现真正的对象常量
Jun 25 Javascript
react-router4 嵌套路由的使用方法
Jul 24 Javascript
基于Vue实例生命周期(全面解析)
Aug 16 Javascript
laydate时间日历插件使用方法详解
Nov 14 Javascript
javascript实现超好看的3D烟花特效
Jan 01 Javascript
JavaScript中的对象和原型(一)
Aug 12 #Javascript
JavaScript中对象的不同创建方法
Aug 12 #Javascript
酷! 不同风格页面布局幻灯片特效js实现
Feb 19 #Javascript
JS+CSS3模拟溢出滚动效果
Aug 12 #Javascript
JS中script标签defer和async属性的区别详解
Aug 12 #Javascript
jquery实现网站列表切换效果的2种方法
Aug 12 #Javascript
很实用的js选项卡切换效果
Aug 12 #Javascript
You might like
PHP 和 MySQL 基础教程(二)
2006/10/09 PHP
一个简单且很好用的php分页类
2013/10/26 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
2013/11/26 PHP
php通过修改header强制图片下载的方法
2015/03/24 PHP
javascript在事件监听方面的兼容性小结
2010/04/07 Javascript
js页面跳转常用的几种方式
2010/11/25 Javascript
JS实现切换标签页效果实例代码
2013/11/01 Javascript
快速解决jquery之get缓存问题的最简单方法介绍
2013/12/19 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
2016/04/12 Javascript
Angularjs CURD 详解及实例代码
2016/09/14 Javascript
Vue数据驱动模拟实现4
2017/01/12 Javascript
Vue中组件之间数据的传递的示例代码
2017/09/08 Javascript
axios发送post请求,提交图片类型表单数据方法
2018/03/16 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
2018/12/22 jQuery
微信小程序 数据缓存实现方法详解
2019/08/26 Javascript
layui type2 通过url给iframe子页面传值的例子
2019/09/06 Javascript
使用Promise封装小程序wx.request的实现方法
2019/11/13 Javascript
Vue中watch、computed、updated三者的区别及用法
2020/07/27 Javascript
[33:28]完美世界DOTA2联赛PWL S3 PXG vs GXR 第三场 12.19
2020/12/24 DOTA
[01:48:04]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第一场 2月7日
2021/03/11 DOTA
python中如何使用正则表达式的集合字符示例
2017/10/09 Python
Python文本统计功能之西游记用字统计操作示例
2018/05/07 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
2020/02/17 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
python和php哪个容易学
2020/06/19 Python
阿提哈德航空官方网站:Etihad Airways
2017/01/06 全球购物
英国知名美妆护肤在线商城:Zest Beauty
2018/04/24 全球购物
Qoo10台湾站:亚洲领先的在线市场
2018/05/15 全球购物
销售工作人员的自我评价分享
2013/11/10 职场文书
2014年机关党委工作总结
2014/12/11 职场文书
医务人员医德考评自我评价
2015/03/03 职场文书
聊聊配置 Nginx 访问与错误日志的问题
2022/05/25 Servers
数据设计之权限的实现
2022/08/05 MySQL