javascript设计模式Constructor(构造器)模式


Posted in Javascript onAugust 19, 2016

Constructor是一种在内存已分配给该对象的情况下,用于初始化新创建对象的特殊方法。Object构造器用于创建特定类型的对象?准备好对象以备使用,同事接收构造器可以使用参数,以在第一次创建对象时,设置成员属性和方法值。

对象创建
创新新对象,在javascript中通常有两种方法:
 1.对象直面量方法
var newObj = {};

 2.构造器的简洁方法
var newObj = new Object();
在Object构造器为特定的值创建对象封装,或者没有传递值时,它将创建一个肯那个对象并返回

 对象赋值的方法:
 1.“点”方法

//设置属性
newObj.name = 'LanFeng';
//获取值
var user= newObj.name;

 1.中括号方法

//设置属性
newObj["name"]= 'LanFeng';
//获取值
var user= newObj["name"];

 1.Object.defineProperty (适用ECMAScript5)

//设置属性
Object.defineProperty(newObj,"name",{
  value:"LanFeng",
  writable:true,
  enumerable:true,
  configurable:true
})

 1.Object.defineProperties

//设置属性
 Object.defineProperties(newObj,{
   "someKey":{
    value:"Hello Js",
     writable:true
  },
  "anotherKey":{
    value:"Foo bar",
    writable:false
  }
})

Javascript不支持类的概念,但它确实支持与对象一起用的特殊constructor函数,通过在构造器前面加new关键字,告诉js像使用构造器一样实例化一个新对象,并且对象成员由该函数定义。
在构造器内,关键字this引用新创建的对象。回顾对象创建,基本的构造器:

function Car(model,year,miles){
  this.model = model;
  this.year = year;
  this.miles = miles;
  this.toString = function(){
  return this.model + "has done" + this.miles +"miles";
  }
}
//创建实例化对象

var civio = new Car("Honda Civio",2009,20000);

var mondeo= new Car("Ford Mondeo",2009,5000);

上面例子是一个简单的构造器模式版本,但它确实存在一些问题,其中一个问题是,它使用继承变得困难,另外一个问题是,toString()这样的函数是为每个使用Car构造器创建的新对象而分别重新定义的,这个不是最理想的,因为这种函数应该在所有的Car类型实例直接共享。

javascript中有有一个prototype的属性,调用js构造器创建一个对象后,新对象就会具有构造器原型的所有属性,通过这种方式,可以创建多个对象,并访问相同的原型,实现方法共享。

function Car(model,year,miles){
  this.model = model;
  this.year = year;
  this.miles = miles;

}


//原型函数
Car.prototype.toString = function(){
  return this.model + "has done" + this.miles +"miles";
  }

//创建实例化对象

var civio = new Car("Honda Civio",2009,20000);
var mondeo= new Car("Ford Mondeo",2009,5000);
console.log(civio.toString())
console.log(mondeo.toString())

现在toString()的单一实例就能够在所有Car对着之间共享。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 网页跳转的方法
Dec 24 Javascript
jQuery EasyUI API 中文文档 - TreeGrid 树表格使用介绍
Nov 21 Javascript
javascript编写实用的省市选择器
Feb 12 Javascript
Three.js快速入门教程
Sep 09 Javascript
bootstrap模态框实现拖拽效果
Dec 14 Javascript
微信小程序开发之入门实例教程篇
Mar 07 Javascript
jQuery响应滚动条事件功能示例
Oct 14 jQuery
详解vue文件中使用echarts.js的两种方式
Oct 18 Javascript
移动端吸顶fixbar的解决方案详解
Jul 17 Javascript
no-vnc和node.js实现web远程桌面的完整步骤
Aug 11 Javascript
VSCode 添加自定义注释的方法(附带红色警戒经典注释风格)
Aug 27 Javascript
js实现搜索提示框效果
Sep 05 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
Aug 19 #Javascript
Angular中$cacheFactory的作用和用法实例详解
Aug 19 #Javascript
AngularJS入门教程之更多模板详解
Aug 19 #Javascript
详解Angular中$cacheFactory缓存的使用
Aug 19 #Javascript
JS获取当前页面名称的简单实例
Aug 19 #Javascript
AngularJS应用开发思维之依赖注入3
Aug 19 #Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
Aug 19 #Javascript
You might like
PHP 中文处理技巧
2010/04/25 PHP
thinkPHP交易详情查询功能详解
2016/12/02 PHP
ThinkPHP开发--使用七牛云储存
2017/09/14 PHP
PHP开启目录引索+fancyindex漂亮目录浏览带搜索功能
2019/09/23 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
2019/10/15 PHP
精通JavaScript 纠正 cleanWhitespace函数
2010/03/11 Javascript
超级有用的13个基于jQuery的内容滚动插件和教程
2011/07/31 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
2013/02/02 Javascript
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
Jquery实现自定义窗口随意的拖拽
2014/03/12 Javascript
jquery 判断滚动条到达了底部和顶端的方法
2014/04/02 Javascript
JavaScript实现班级随机点名小应用需求的具体分析
2014/05/12 Javascript
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
详述JavaScript实现继承的几种方式(推荐)
2016/03/22 Javascript
详解Vue方法与事件
2017/03/09 Javascript
使用gulp构建前端自动化的方法示例
2018/12/25 Javascript
Vue实现滑动拼图验证码功能
2019/09/15 Javascript
vue 导航菜单刷新状态不消失,显示对应的路由界面操作
2020/08/06 Javascript
使用Vue-scroller页面input框不能触发滑动的问题及解决方法
2020/08/08 Javascript
探索node之事件循环的实现
2020/10/30 Javascript
使用Python发送邮件附件以定时备份MySQL的教程
2015/04/25 Python
Python安装第三方库及常见问题处理方法汇总
2016/09/13 Python
用Python实现随机森林算法的示例
2017/08/24 Python
python进行两个表格对比的方法
2018/06/27 Python
python实现转圈打印矩阵
2019/03/02 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
2020/10/18 Python
.NET程序员的数据库面试题
2012/10/10 面试题
公司股权转让协议书
2014/04/12 职场文书
毕业证丢失证明范本
2014/09/20 职场文书
我是特种兵观后感
2015/06/11 职场文书
2016年春季趣味运动会开幕词
2016/03/04 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书
MySQL通过binlog恢复数据
2021/05/27 MySQL
Python list列表删除元素的4种方法
2021/11/01 Python
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏