详解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 相关文章推荐
超级兔子让浮动层消失的前因后果
Mar 09 Javascript
JS实现黑客帝国文字下落效果
Sep 01 Javascript
javascript跨域的方法汇总
Oct 23 Javascript
JS组件Bootstrap导航条使用方法详解
Apr 29 Javascript
Node.js学习入门
Jan 03 Javascript
JS实现touch 点击滑动轮播实例代码
Jan 19 Javascript
JavaScript实现反转字符串的方法详解
Apr 27 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
Sep 05 Javascript
详解vue-router 初始化时做了什么
Jun 11 Javascript
vue打包使用Nginx代理解决跨域问题
Aug 27 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
Oct 24 jQuery
微信小程序 image组件遇到的问题
May 28 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
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
IIS安装Apache伪静态插件的具体操作图文
2013/07/01 PHP
实例讲解PHP面向对象之多态
2014/08/20 PHP
简单的pgsql pdo php操作类实现代码
2016/08/25 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
2019/03/12 PHP
使用typeof方法判断undefined类型
2014/09/09 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
2014/10/17 Javascript
JavaScript知识点总结(四)之逻辑OR运算符详解
2016/05/31 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
2016/09/01 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
2016/09/06 Javascript
Bootstrap3 模态框使用实例
2017/02/22 Javascript
jquery仿ps颜色拾取功能
2017/03/08 Javascript
JS简单获取日期相差天数的方法
2017/04/24 Javascript
详解js静态资源文件请求的处理
2017/08/01 Javascript
js实现计时器秒表功能
2019/12/16 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
[52:06]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
用Python输出一个杨辉三角的例子
2014/06/13 Python
Python3基础之条件与循环控制实例解析
2014/08/13 Python
Python实现中文数字转换为阿拉伯数字的方法示例
2017/05/26 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
2017/11/30 Python
Python判断中文字符串是否相等的实例
2018/07/06 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
Python3.x+pyqtgraph实现数据可视化教程
2020/03/14 Python
CSS3 transforms应用于背景图像的解决方法
2019/04/16 HTML / CSS
德国最大的设计师鞋网上商店:Budapester
2017/12/07 全球购物
Android面试题附答案
2014/12/08 面试题
酒店门卫岗位职责
2013/12/29 职场文书
会计专业大学生职业生涯规划书
2014/02/11 职场文书
技能比赛获奖感言
2014/02/14 职场文书
大学生秋游活动方案
2014/02/17 职场文书
信用卡催款律师函
2015/05/27 职场文书
2016年6.5世界环境日宣传活动总结
2016/04/01 职场文书
Spring Data JPA框架Repository自定义实现
2022/04/28 Java/Android
vue3 自定义图片放大器效果的示例代码
2022/07/23 Vue.js