详解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 相关文章推荐
转一个日期输入控件,支持FF
Apr 27 Javascript
JQuery 构建客户/服务分离的链接模型中Table分页代码效率初探
Jan 22 Javascript
toString()一个会自动调用的方法
Feb 08 Javascript
javascript实现的元素拖动函数宿主为浏览器
Jul 21 Javascript
JavaScript中使用document.write向页面输出内容实例
Oct 16 Javascript
js在IE与firefox的差异集锦
Nov 11 Javascript
Jquery Ajax xmlhttp请求成功问题
Feb 04 Javascript
JS实现状态栏跑马灯文字效果代码
Oct 24 Javascript
JS如何设置iOS中微信浏览器的title
Nov 22 Javascript
js轮播图无缝滚动效果
Jun 17 Javascript
Vue Socket.io源码解读
Feb 07 Javascript
jQuery实现高度灵活的表单验证功能示例【无UI】
Apr 30 jQuery
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安全之直接用$获取值而不$_GET 字符转义
2012/06/03 PHP
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
2014/06/23 PHP
解读PHP的Yii框架中请求与响应的处理流程
2016/03/17 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
js身份证验证超强脚本
2008/10/26 Javascript
jquery实现带复选框的表格行选中删除时高亮显示
2013/08/01 Javascript
js中将String转换为number以便比较
2014/07/08 Javascript
javascript实现当前页导航激活的方法
2015/02/27 Javascript
浅谈JavaScript正则表达式分组匹配
2015/04/10 Javascript
纯JS打造网页中checkbox和radio的美化效果
2016/10/13 Javascript
如何提高javascript加载速度
2016/12/26 Javascript
bootstrap table sum总数量统计实现方法
2017/10/29 Javascript
mongoose更新对象的两种方法示例比较
2017/12/19 Javascript
使用D3.js+Vue实现一个简单的柱形图
2018/08/05 Javascript
JS实现数组去重,显示重复元素及个数的方法示例
2019/01/21 Javascript
js使用cookie实现记住用户名功能示例
2019/06/13 Javascript
使用layui前端框架弹出form表单以及提交的示例
2019/10/25 Javascript
vue 取出v-for循环中的index值实例
2019/11/09 Javascript
Egg Vue SSR 服务端渲染数据请求与asyncData
2019/11/24 Javascript
[40:10]2015国际邀请赛全明星表演赛
2015/08/07 DOTA
Python lxml模块安装教程
2015/06/02 Python
Python用Bottle轻量级框架进行Web开发
2016/06/08 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
Python中字符串与编码示例代码
2019/05/20 Python
python 字符串追加实例
2019/07/20 Python
python paramiko远程服务器终端操作过程解析
2019/12/14 Python
python实现指定ip端口扫描方式
2019/12/17 Python
python 引用传递和值传递详解(实参,形参)
2020/06/05 Python
Oracle性能调优原则
2012/05/03 面试题
公务员平时考核实施方案
2014/03/11 职场文书
盲山观后感
2015/06/11 职场文书
开学随笔
2015/08/15 职场文书
如何做好工作总结!
2019/04/10 职场文书
python爬虫--selenium模块
2021/03/31 Python