详解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 相关文章推荐
基于Asp.net与Javascript控制的日期控件
May 22 Javascript
javascript制作的网页侧边弹出框思路及实现代码
May 21 Javascript
详解JavaScript的流程控制语句
Nov 30 Javascript
javascript的 {} 语句块详解
Feb 27 Javascript
一分钟理解js闭包
May 04 Javascript
使用React实现轮播效果组件示例代码
Sep 05 Javascript
JS实现旋转木马式图片轮播效果
Jan 18 Javascript
jQuery表单元素选择器代码实例
Feb 06 Javascript
详解vue数据渲染出现闪烁问题
Jun 29 Javascript
Node.js使用Angular简单示例
May 11 Javascript
JavaScript实现拖拽效果
Mar 16 Javascript
vue中使用router全局守卫实现页面拦截的示例
Oct 23 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种方法
2015/11/24 PHP
smarty自定义函数用法示例
2016/05/20 PHP
php调用云片网接口发送短信的实现方法
2017/10/25 PHP
PHP微信发送推送消息乱码的解决方法
2019/02/28 PHP
JS 事件绑定函数代码
2010/04/28 Javascript
JS的replace方法介绍
2012/10/20 Javascript
JS二维数组的定义说明
2014/03/03 Javascript
浅析Node在构建超媒体API中的作用
2014/07/30 Javascript
js实现编辑div节点名称的方法
2014/12/17 Javascript
javascript匀速动画和缓冲动画详解
2016/10/20 Javascript
JS树形菜单组件Bootstrap TreeView使用方法详解
2016/12/21 Javascript
Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
2017/05/10 Javascript
js Dom实现换肤效果
2017/10/21 Javascript
JavaScript HTML DOM元素 节点操作汇总
2019/07/29 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
2019/11/13 Javascript
JS 5种遍历对象的方式
2020/06/16 Javascript
[07:47]DOTA2国际邀请赛采访专栏:探访Valve总部
2013/08/08 DOTA
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
python 处理dataframe中的时间字段方法
2018/04/10 Python
python微元法计算函数曲线长度的方法
2018/11/08 Python
django 自定义filter 判断if var in list的例子
2019/08/20 Python
pytorch使用horovod多gpu训练的实现
2020/09/09 Python
Pandas中DataFrame交换列顺序的方法实现
2020/12/14 Python
优衣库澳大利亚官网:UNIQLO澳大利亚
2017/01/18 全球购物
开工庆典邀请函范文
2014/01/16 职场文书
就业自我评价
2014/02/04 职场文书
弘扬职业精神演讲稿
2014/03/20 职场文书
药剂专业自荐信范文
2014/04/16 职场文书
银行柜员求职自荐书
2014/06/18 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
水电工岗位职责
2015/02/14 职场文书
酒店保洁员岗位职责
2015/02/26 职场文书
vue实现锚点定位功能
2021/06/29 Vue.js
CSS实现九宫格布局(自适应)的示例代码
2022/02/12 HTML / CSS
Python创建SQL数据库流程逐步讲解
2022/09/23 Python