Rumah  >  Artikel  >  hujung hadapan web  >  Penjelasan terperinci tentang corak Pembina dalam kemahiran JavaScript_javascript

Penjelasan terperinci tentang corak Pembina dalam kemahiran JavaScript_javascript

WBOY
WBOYasal
2016-05-16 15:19:541305semak imbas

Penerangan ringkas tentang corak pembina (lihat gambar):

Pembina tidak boleh diwarisi, jadi Overriding tidak boleh ditindih, tetapi Overloading boleh ditindih. Pembina digunakan untuk mencipta objek daripada jenis tertentu - menyediakan objek untuk digunakan dan menerima parameter yang boleh digunakan oleh pembina untuk menetapkan nilai sifat ahli dan kaedah apabila objek itu mula-mula dicipta

1. Cipta objek

Dua cara untuk mencipta objek baharu

var newObject={};
var newObject=new object();//object 构造器的简洁记法

2. Pembina Asas

Jika Javascript tidak menyokong kelas, objek dan Pembina boleh digunakan untuk membuat instantiat objek melalui kata kunci baharu Kodnya mungkin seperti ini

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. Pembina dengan prototaip

JavaScript mempunyai atribut prototaip. Selepas memanggil pembina JavaScript untuk mencipta objek, objek baharu akan mempunyai semua sifat prototaip pembina. Dengan cara ini, berbilang objek Kereta boleh dibuat (mengakses prototaip yang sama)

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());

Kini satu contoh toString() boleh dikongsi antara semua objek Kereta

Izinkan saya berkongsi dengan anda kesilapan biasa pembina dalam projek sebenar

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();
}
}

Tempahannya adalah seperti ini, mula-mula untuk menjana B, anda perlu menjana A dahulu, jadi panggil pembina A, keluaran AAA, dan kemudian panggil kaedah dosomething Nota: Kaedah A ini ditimpa oleh B, dan apa yang anda jana ialah objek B. , jadi ia memanggil kaedah B. Memandangkan BVAR pada masa ini tidak mempunyai nilai tertentu, ia dimulakan secara automatik kepada 0;

Kemudian jana objek B, mula-mula mulakan pembolehubah BVAR, kemudian panggil pembina untuk mengeluarkan BBB, dan kemudian panggil kaedah Pada masa ini, BVAR telah dimulakan, jadi output BVAR = 2222, dan pembolehubah AVAR dalam. objek A tidak memanggil kaedah sebagai sesuatu objek A. , jadi nilainya ialah 0, kemudian keluarkan 0

Keseluruhan output adalah seperti berikut:

AAA

Bvar=0
BBB
Bvar=2222
Avar=0

Nota: Dalam susunan permulaan, apabila mewarisi, objek superclass dijana dahulu Apabila objek dijana, pembolehubah statik dijana dahulu, kemudian pembolehubah umum, dan kemudian pembina dipanggil. Apabila semua objek superclass dijana, objek ini dijana dalam susunan yang sama! Apabila kaedah diganti, kaedah objek semasa dipanggil! Ini perlu diberi perhatian.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn