详解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 相关文章推荐
this[] 指的是什么内容 讨论
Mar 24 Javascript
javascript 短路法代码精简
Aug 20 Javascript
浅谈javascript 面向对象编程
Oct 28 Javascript
javascript学习笔记(五)正则表达式
Apr 08 Javascript
jQuery常用的一些技巧汇总
Mar 26 Javascript
简单实现jQuery级联菜单
Jan 09 Javascript
详解vue.js数据传递以及数据分发slot
Jan 20 Javascript
Vue项目部署在Spring Boot出现页面空白问题的解决方案
Nov 26 Javascript
Vue动态路由缓存不相互影响的解决办法
Feb 19 Javascript
JavaScript实现图片伪异步上传过程解析
Apr 10 Javascript
JavaScript indexOf()原理及使用方法详解
Jul 09 Javascript
前端使用crypto.js进行加密的函数代码
Aug 16 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
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
php allow_url_include的应用和解释
2010/04/22 PHP
PHP学习之正则表达式
2011/04/17 PHP
drupal 代码实现URL重写
2011/05/04 PHP
基于PHP读取TXT文件向数据库导入海量数据的方法
2013/04/23 PHP
PHP字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
PHP实现通用alert函数的方法
2015/03/11 PHP
PHP中COOKIES使用示例
2015/07/26 PHP
php+ajax登录跳转登录实现思路
2016/07/31 PHP
PHP通过GD库实现验证码功能示例
2019/02/23 PHP
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
JavaScript解析json格式数据简单示例
2014/12/09 Javascript
bootstrap table 服务器端分页例子分享
2015/02/10 Javascript
jQuery往textarea中光标所在位置插入文本的方法
2015/06/26 Javascript
JS实现兼容性好,带缓冲的动感网页右键菜单效果
2015/09/18 Javascript
JavaScrip调试技巧之断点调试
2015/10/22 Javascript
Nodejs express框架一个工程中同时使用ejs模版和jade模版
2015/12/28 NodeJs
JavaScript使用简单正则表达式的数据验证功能示例
2017/01/13 Javascript
详解vue-validator(vue验证器)
2017/01/16 Javascript
react实现pure render时bind(this)隐患需注意!
2017/03/09 Javascript
微信小程序template模板实例详解
2017/10/27 Javascript
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
原生js实现无缝轮播图效果
2021/01/28 Javascript
[48:24]完美世界DOTA2联赛循环赛LBZS vs Forest 第一场 10月30日
2020/10/31 DOTA
Python聊天室实例程序分享
2016/01/05 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
pygame实现弹球游戏
2020/04/14 Python
使用Python实现音频双通道分离
2020/12/25 Python
利用python绘制正态分布曲线
2021/01/04 Python
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
2013/04/22 HTML / CSS
HTML页面中添加Canvas标签示例
2015/01/01 HTML / CSS
黄金搭档广告词
2014/03/21 职场文书
学习之星事迹材料
2014/05/17 职场文书
魂断蓝桥观后感
2015/06/10 职场文书
2015中学政教处工作总结
2015/07/22 职场文书
解决spring.thymeleaf.cache=false不起作用的问题
2022/06/10 Java/Android