您好,欢迎访问一九零五行业门户网

详解JavaScript中的构造器Constructor模式_javascript技巧

构造器模式简单描述(看图):
构造器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
注意:初始化顺序,当继承时,先生成超类对象,生成对象时,先生成静态变量,然后是一般变量,然后调用构造器!当所有超类对象生成后,生成本对象,顺序一样! 当方法被覆盖时,调用目前对象的方法!这得注意。
其它类似信息

推荐信息