详解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 相关文章推荐
JavaScript表单常用验证集合
Jan 16 Javascript
基于jquery的textarea发布框限制文字字数输入(添加中文识别)
Feb 16 Javascript
JS window对象的top、parent、opener含义介绍
Dec 03 Javascript
jquery中EasyUI实现异步树
Mar 01 Javascript
手机开发必备技巧:javascript及CSS功能代码分享
May 25 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
Sep 15 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
Feb 18 Javascript
vue.js学习笔记之v-bind和v-on解析
May 03 Javascript
微信小程序整合使用富文本编辑器的方法详解
Apr 25 Javascript
jquery-ui 进度条功能示例【测试可用】
Jul 25 jQuery
JS中FileReader类实现文件上传及时预览功能
Mar 27 Javascript
用JS创建一个录屏功能
Nov 11 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 第三节 变量介绍
2012/04/28 PHP
PHP中array_merge和array相加的区别分析
2013/06/17 PHP
解析mysql 表中的碎片产生原因以及清理
2013/06/22 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
2016/04/22 PHP
php微信开发之谷歌测距
2018/06/14 PHP
加载jQuery后$冲突的解决办法
2010/07/09 Javascript
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
一行命令搞定node.js 版本升级
2014/07/20 Javascript
Node.js中使用Buffer编码、解码二进制数据详解
2014/08/16 Javascript
jquery中push()的用法(数组添加元素)
2014/11/25 Javascript
JS判断字符串包含的方法
2015/05/05 Javascript
js仿腾讯QQ的web登陆界面
2016/08/19 Javascript
javaScript语法总结
2016/11/25 Javascript
vue.js组件之间传递数据的方法
2017/07/10 Javascript
js将当前时间格式化为 年-月-日 时:分:秒的实现代码
2018/01/20 Javascript
Vue Socket.io源码解读
2018/02/07 Javascript
让webpack+vue-cil项目不再自动打开浏览器的方法
2018/09/27 Javascript
vue router的基本使用和配置教程
2018/11/05 Javascript
微信小程序非跳转式组件授权登录的方法示例
2019/05/22 Javascript
[02:36]DOTA2英雄基础教程 斯拉克
2013/11/29 DOTA
python基于mysql实现的简单队列以及跨进程锁实例详解
2014/07/07 Python
Python实现多行注释的另类方法
2014/08/22 Python
Python实现的归并排序算法示例
2017/11/21 Python
python3 读写文件换行符的方法
2018/04/09 Python
对Python3.x版本print函数左右对齐详解
2018/12/22 Python
python正则表达式去除两个特殊字符间的内容方法
2018/12/24 Python
pycharm新建Vue项目的方法步骤(图文)
2020/03/04 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
css3 flex布局 justify-content:space-between 最后一行左对齐
2020/01/02 HTML / CSS
The North Face北面英国官网:美国著名户外品牌
2017/12/13 全球购物
Linux机考试题
2015/07/17 面试题
学校食堂采购员岗位职责
2013/12/05 职场文书
个人委托书怎么写
2014/04/04 职场文书
关于安全的演讲稿
2014/05/09 职场文书
生产设备维护保养制度
2015/08/06 职场文书