详解JavaScript中的构造器Constructor模式


Posted in Javascript onJanuary 14, 2016

构造器模式简单描述(看图):

详解JavaScript中的构造器Constructor模式

构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。构造器用于创建特定类型对象——准备好对象以备使用,同时接收构造器可以使用的参数,以在第一次创建对象时,设置成员属性和方法的值

1、创建对象

新对象创建的两种方法

var newObject={};
var newObject=new object();//object 构造器的简洁记法

2、基本Constructor

Javascript不支持类的情况下对象与Constructor,通过new关键字实例化一个对象,代码大概是这样的

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";
};
};
//用法
//可以创建car新实例
var civic=new Car("Hona Civic",2009,2000);
var mondeo=new Car("Ford Mondeo",2010,5000);
console.log(civic.toString());
console.log(mondeo.toString());

3、带原型的Constructor

JavaScript 有prototype属性。及调用JavaScript构造器创建一个对象后,新对象就会具有构造器原型的所有属性。同过这种方式,可以创建多个Car对象(访问相同的原型)

funcion() Ca(model,year,miles){
this.model=model;
this.year=year;
this.miles=miles;
//注意使用Object.prototype.newMethod 而不是Object.prototype是为了重新定义prototype对象
Car.prototype.toString=function(){
return this.model+"Has done" +this.miles+"miles";
};
};
//用法
var civic=new Car("Honda Civic",2009,20000);
var momdeo=new Car("Ford Mondeo",2010,5000);
console.log(civic.toString());
console.log(mondeo.toString());

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

下面给大家分享构造器constructor在实际项目中易错的题

class A {
public int Avar;
public A() {
System.out.println("AAA");
doSomething();
}
public void doSomething() {
Avar = 1111;
System.out.println("A.doSomething()");
}
}
public class B extends A {
public int Bvar = 2222;
public B() {
System.out.println("BBB");
doSomething();
System.out.println("Avar=" + Avar);
}
public void doSomething() {
System.out.println("Bvar=" + Bvar);
}
public static void main(String[] args) {
new B();
}
}

顺序是这样得,首先生成B就得先生成A,所以调用A的构造器,输出AAA,然后调用方法dosomething,注意:A的该方法被B覆盖,而你生成的是B的对象,所以它调用B的方法,由于BVAR目前没有给定值,所以自动初始化为0;

然后生成B对象,先初始化变量BVAR,然后调用构造器输出BBB,然后调用方法,这时BVAR已初始化,所以输出BVAR=2222,而对象A中变量AVAR由于没有调用对象A的方法dosomething,所以其值为0,则输出0

全部输出就如下:

AAA
Bvar=0
BBB
Bvar=2222
Avar=0

注意:初始化顺序,当继承时,先生成超类对象,生成对象时,先生成静态变量,然后是一般变量,然后调用构造器!当所有超类对象生成后,生成本对象,顺序一样! 当方法被覆盖时,调用目前对象的方法!这得注意。

Javascript 相关文章推荐
Jquery增加鼠标中间功能mousewheel的实例代码
Sep 05 Javascript
jQuery获取样式中颜色值的方法
Jan 29 Javascript
jQuery获得document和window对象宽度和高度的方法
Mar 25 Javascript
浅谈javascript构造函数与实例化对象
Jun 22 Javascript
JS建造者模式基本用法实例分析
Jun 30 Javascript
AngularJS控制器之间的数据共享及通信详解
Aug 01 Javascript
Vue.js bootstrap前端实现分页和排序
Mar 10 Javascript
前端框架学习总结之Angular、React与Vue的比较详解
Mar 14 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
May 20 jQuery
three.js实现3D影院的原理的代码分析
Dec 18 Javascript
探秘vue-rx 2.0(推荐)
Sep 21 Javascript
微信小程序合法域名配置方法
May 06 Javascript
jquery+json实现动态商品内容展示的方法
Jan 14 #Javascript
jQuery遮罩层效果实例分析
Jan 14 #Javascript
JavaScript面向对象之私有静态变量实例分析
Jan 14 #Javascript
浏览器环境下JavaScript脚本加载与执行探析之defer与async特性
Jan 14 #Javascript
js实现input密码框提示信息的方法(附html5实现方法)
Jan 14 #Javascript
jQuery div拖拽用法实例
Jan 14 #Javascript
javascript检测flash插件是否被禁用的方法
Jan 14 #Javascript
You might like
杏林同学录(六)
2006/10/09 PHP
PHP企业级应用之常见缓存技术篇
2011/01/27 PHP
php分页思路以及在ZF中的使用
2012/05/30 PHP
PHP实现下载功能的代码
2012/09/29 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
jquery remove方法应用详解
2012/11/22 Javascript
js实现屏幕自适应局部代码分享
2015/01/30 Javascript
js实现最短的XML格式化工具实例
2015/03/12 Javascript
AngularJS基础 ng-class-odd 指令示例
2016/08/01 Javascript
jQuery实现自动调用和触发某个事件的方法
2016/11/18 Javascript
在iframe中使bootstrap的模态框在父页面弹出问题
2017/08/07 Javascript
jQuery封装animate.css的实例
2018/01/04 jQuery
Vue实现移动端左右滑动效果的方法
2018/11/27 Javascript
JavaScript实现联动菜单特效
2020/01/07 Javascript
js校验开始时间和结束时间
2020/05/26 Javascript
[01:20]辉夜杯背景故事宣传片《辉夜传说》
2015/12/25 DOTA
Python函数式编程指南(三):迭代器详解
2015/06/24 Python
python模块smtplib实现纯文本邮件发送功能
2018/05/22 Python
Django migrations 默认目录修改的方法教程
2018/09/28 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
2018/11/30 Python
Python异常处理知识点总结
2019/02/18 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
2019/05/23 Python
使用celery执行Django串行异步任务的方法步骤
2019/06/06 Python
在keras中model.fit_generator()和model.fit()的区别说明
2020/06/17 Python
Python Sqlalchemy如何实现select for update
2020/10/12 Python
Python 多进程、多线程效率对比
2020/11/19 Python
采购类个人求职的自我评价
2014/02/18 职场文书
促销活动方案模板
2014/02/24 职场文书
消防安全员岗位职责
2014/03/10 职场文书
政府法律服务方案
2014/06/14 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
世界水日宣传活动总结
2015/02/09 职场文书
升职自荐书
2019/05/09 职场文书
使用react+redux实现计数器功能及遇到问题
2021/06/02 Javascript
python游戏开发Pygame框架
2022/04/22 Python
mysql如何查询连续记录
2022/05/11 MySQL