详解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 相关文章推荐
js 发个判断字符串是否为符合标准的函数
Apr 27 Javascript
学习ExtJS fit布局使用说明
Oct 08 Javascript
JavaScript 判断判断某个对象是Object还是一个Array
Jan 28 Javascript
jquery(live)中File input的change方法只起一次作用的解决办法
Oct 21 Javascript
JavaScript ParseFloat()方法
Dec 18 Javascript
Bootstrap学习笔记之css组件(3)
Jun 07 Javascript
layer弹出层框架alert与msg详解
Mar 14 Javascript
angularJS深拷贝详解
Mar 23 Javascript
完美解决浏览器跨域的几种方法(汇总)
May 08 Javascript
Vue项目中ESlint规范示例代码
Jul 04 Javascript
微信小程序的开发范式BeautyWe.js入门详解
Jul 10 Javascript
Javascript实现简易天数计算器
May 18 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
无数据库的详细域名查询程序PHP版(4)
2006/10/09 PHP
PHP+MYSQL的文章管理系统(二)
2006/10/09 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
JS控制日期显示的小例子
2013/11/23 Javascript
js实现ArrayList功能附实例代码
2014/10/29 Javascript
浅谈JavaScript中的string拥有方法的原因
2015/08/28 Javascript
JavaScript代码判断点击第几个按钮
2015/12/13 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
2016/09/20 Javascript
Vue.js在使用中的一些注意知识点
2017/04/29 Javascript
分享19个JavaScript 有用的简写写法
2017/07/07 Javascript
vue Render中slots的使用的实例代码
2017/07/19 Javascript
移动设备手势事件库Touch.js使用详解
2017/08/18 Javascript
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
vue最简单的前后端交互示例详解
2018/10/11 Javascript
js中实例与对象的区别讲解
2019/01/21 Javascript
javascript防抖函数debounce详解
2019/06/11 Javascript
vue.js实现备忘录demo
2019/06/26 Javascript
python中numpy包使用教程之数组和相关操作详解
2017/07/30 Python
运用TensorFlow进行简单实现线性回归、梯度下降示例
2018/03/05 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
2019/04/11 Python
python 列表转为字典的两个小方法(小结)
2019/06/28 Python
详解python播放音频的三种方法
2019/09/23 Python
使用pytorch实现可视化中间层的结果
2019/12/30 Python
python爬虫模块URL管理器模块用法解析
2020/02/03 Python
Python如何批量生成和调用变量
2020/11/21 Python
卡塔尔航空官方网站:Qatar Airways
2017/02/08 全球购物
连卡佛中国官网:Lane Crawford中文站
2018/01/27 全球购物
法国一家芭蕾舞鞋公司:Repetto
2018/11/12 全球购物
美国转售二手商品的电子商务平台:BLINQ
2018/12/13 全球购物
为数据库创建索引都需要注意些什么
2012/07/17 面试题
农村婚礼证婚词
2014/01/08 职场文书
给校长的一封建议书
2014/03/12 职场文书
二年级上册数学教学计划
2015/01/20 职场文书
关于学习的决心书
2015/02/05 职场文书
教师考核表个人总结
2015/02/12 职场文书
2015年公务员试用期工作总结
2015/05/28 职场文书