详解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 函数式编程
Aug 16 Javascript
JavaScript 对象模型 执行模型
Oct 15 Javascript
javascript数字数组去重复项的实现代码
Dec 30 Javascript
JS原型对象通俗"唱法"
Dec 27 Javascript
js操作CheckBoxList实现全选/反选(在客服端完成)
Feb 02 Javascript
Javascript的严格模式strict mode详细介绍
Jun 06 Javascript
jQuery trigger()方法用法介绍
Jan 13 Javascript
详解AngularJS的通信机制
Jun 18 Javascript
Javascript简单改变表单元素背景的方法
Jul 15 Javascript
javascript实现input file上传图片预览效果
Dec 31 Javascript
Bootstrap中datetimepicker使用小结
Dec 28 Javascript
前端开发基础javaScript的六大作用
Aug 06 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 字符过滤类,用于过滤各类用户输入的数据
2009/05/27 PHP
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
PHP将HTML转换成文本的实现代码
2015/01/21 PHP
php读取csv文件并输出的方法
2015/03/14 PHP
javascript 解决表单仍然提交即使监听处理函数返回false
2010/03/14 Javascript
cookie 最近浏览记录(中文escape转码)具体实现
2013/06/08 Javascript
火狐textarea输入法的bug的触发及解决
2013/07/24 Javascript
纯css+js写的一个简单的tab标签页带样式
2014/01/28 Javascript
Egret引擎开发指南之视觉编程
2014/09/03 Javascript
JavaScript前端图片加载管理器imagepool使用详解
2014/12/29 Javascript
jquery比较简洁的软键盘特效实现方法
2015/03/19 Javascript
使用jquery插件qrcode生成二维码
2015/10/22 Javascript
BootStrap selectpicker
2016/06/20 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
2016/11/09 Javascript
p5.js入门教程之鼠标交互的示例
2018/03/16 Javascript
Vue组件全局注册实现警告框的实例详解
2018/06/11 Javascript
jquery实现选项卡切换代码实例
2019/05/14 jQuery
python队列通信:rabbitMQ的使用(实例讲解)
2017/12/22 Python
利用Python进行数据可视化常见的9种方法!超实用!
2018/07/11 Python
在交互式环境中执行Python程序过程详解
2019/07/12 Python
python实现socket+threading处理多连接的方法
2019/07/23 Python
关于PyTorch 自动求导机制详解
2019/08/18 Python
python监控nginx端口和进程状态
2019/09/06 Python
Python 使用 environs 库定义环境变量的方法
2020/02/25 Python
jupyter notebook更换皮肤主题的实现
2021/01/07 Python
CSS3实现滚动条动画效果代码分享
2016/08/03 HTML / CSS
英国翻新电子产品购物网站:Tech Trade
2017/12/25 全球购物
电子信息工程自荐信
2014/05/26 职场文书
敬老院标语
2014/06/27 职场文书
高中学生会竞选演讲稿
2014/08/25 职场文书
2014年为民办实事工作总结
2014/12/20 职场文书
齐云山导游词
2015/02/06 职场文书
特岗教师个人总结
2015/02/10 职场文书
2015年音乐教学工作总结
2015/07/22 职场文书
趣味运动会广播稿
2015/08/19 职场文书
Python学习之os包使用教程详解
2022/03/21 Python