详解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 相关文章推荐
ajax请求get与post的区别总结
Nov 04 Javascript
JQuery动态添加和删除表格行的方法
Mar 09 Javascript
jQuery往返城市和日期查询实例讲解
Oct 09 Javascript
js+canvas绘制矩形的方法
Jan 28 Javascript
jQuery实现下拉加载功能实例代码
Apr 01 Javascript
AngularJS中update两次出现$promise属性无法识别的解决方法
Jan 05 Javascript
Vue 2.0的数据依赖实现原理代码简析
Jul 10 Javascript
webpack将js打包后的map文件详解
Feb 22 Javascript
Vue中v-for的数据分组实例
Mar 07 Javascript
Vue-router 切换组件页面时进入进出动画方法
Sep 01 Javascript
vue+element实现表格新增、编辑、删除功能
May 28 Javascript
layui上传图片到服务器的非项目目录下的方法
Sep 26 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/01/10 PHP
PHP与服务器文件系统的简单交互
2016/10/21 PHP
关于laravel后台模板laravel-admin select框的使用详解
2019/10/03 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
数组方法解决JS字符串连接性能问题有争议
2011/01/12 Javascript
40款非常有用的 jQuery 插件推荐(系列一)
2011/12/21 Javascript
jQuery滚动加载图片效果的实现
2013/03/06 Javascript
用JS将搜索的关键字高亮显示实现代码
2013/11/08 Javascript
Js nodeType 属性全面解析
2013/11/14 Javascript
Extjs根据条件设置表格某行背景色示例
2014/07/23 Javascript
深入探究JavaScript中for循环的效率问题及相关优化
2016/03/13 Javascript
Vue 固定头 固定列 点击表头可排序的表格组件
2016/11/25 Javascript
微信小程序 出现47001 data format error原因解决办法
2017/03/10 Javascript
如何理解jQuery中的ajaxSubmit方法
2017/03/13 Javascript
详解Vue.js 响应接口
2020/07/04 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
2020/11/12 Javascript
[05:16]《大圣!大圣》——DOTA2新英雄齐天大圣配音李世宏老师专访
2016/12/13 DOTA
各个系统下的Python解释器相关安装方法
2015/10/12 Python
Python3计算三角形的面积代码
2017/12/18 Python
python程序封装为win32服务的方法
2021/03/07 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
python pygame实现滚动横版射击游戏城市之战
2019/11/25 Python
创建Shapefile文件并写入数据的例子
2019/11/26 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
pycharm 中mark directory as exclude的用法详解
2020/02/14 Python
Python 如何查找特定类型文件
2020/08/17 Python
详解基于python的图像Gabor变换及特征提取
2020/10/26 Python
Onzie官网:美国时尚瑜伽品牌
2019/08/21 全球购物
小学三年级学生评语
2014/04/22 职场文书
工作年限证明模板
2014/11/01 职场文书
同事打架检讨书
2015/05/06 职场文书
哈姆雷特读书笔记
2015/06/29 职场文书
2015教师个人德育工作总结
2015/07/22 职场文书
企业宣传稿范文
2015/07/23 职场文书
redis哨兵常用命令和监控示例详解
2021/05/27 Redis
Nginx如何配置多个服务域名解析共用80端口详解
2022/09/23 Servers