Rumah  >  Artikel  >  hujung hadapan web  >  Perbincangan ringkas tentang cara melaksanakan warisan dalam kemahiran Javascript_javascript

Perbincangan ringkas tentang cara melaksanakan warisan dalam kemahiran Javascript_javascript

WBOY
WBOYasal
2016-05-16 15:51:311037semak imbas

S1: Segala-galanya dalam js ialah objek Fikirkan tentang cara kita melaksanakan pewarisan sifat dan kaedah objek induk pada mulanya

function Parent(){
   this.name='123';
}
Parent.prototype.getName=function(){
   return this.name;
}
function Son(){
   this.age=20;
}
Son.prototype=new Parent();
Son.prototype.getAge=function(){
   return this.age;
}
var son=new Son();
console.log('Name :'+son.getName()+';Age: '+son.getAge());
 
 
VM1777:16 Name :123;Age: 20
Seperti yang anda boleh lihat dari di atas, pewarisan Parent adalah terutamanya untuk menimpa prototaip Son, supaya sifat dan kaedah Parent diserahkan kepada prototaip Son Dengan cara ini, objek yang dibina melalui Son baru () adalah semua Akan mewarisi sifat dan kaedah daripada prototaip [iaitu, objek induk Induk], dengan itu mencapai kesan pewarisan tetapi ini akan membawa kesan sampingan, iaitu, apabila objek induk mengandungi atribut jenis rujukan, yang objek kanak-kanak akan mengubah suai data jenis rujukan , akan menjejaskan semua sub-objek, jelas ini bukan kesan yang kita perlukan:

function Parent(){
   this.name='123';
   this.fruits=['apple'];
}
Parent.prototype.getName=function(){
   return this.name;
}
function Son(){
   this.age=20;
}
Son.prototype=new Parent();
Son.prototype.getAge=function(){
   return this.age;
}
var son=new Son();
var son1=new Son();
console.log(son.fruits);//["apple"]
console.log(son1.fruits);//["apple"]
son.fruits.push('pear');
console.log(son.fruits);//["apple", "pear"]
console.log(son1.fruits);//["apple", "pear"]
S2: Pemikiran semasa untuk menyelesaikan masalah ini adalah untuk menjadikan setiap objek kanak-kanak mempunyai salinan atribut objek induk Dengan cara ini, apabila mengubah suai atribut, hanya atribut di bawah objek kanak-kanak diubah suai, tanpa menjejaskan atribut. objek kanak-kanak lain. Matlamat ini dicapai dengan merujuk kepada kaedah penyamaran objek sebelumnya

function Parent(){
   this.name='123';
   this.fruits=['apple'];
}
Parent.prototype.getName=function(){
   return this.name;
}
function Son(){
   Parent.call(this);
   this.age=20;
}
Son.prototype=new Parent();
Son.prototype.getAge=function(){
   return this.age;
}
var son=new Son();
var son1=new Son();
console.log(son.fruits);//["apple"]
console.log(son1.fruits);//["apple"]
son.fruits.push('pear');
console.log(son.fruits);//["apple", "pear"]
console.log(son1.fruits);//["apple"]
Saya menambah Parent.call(this) pada fungsi Son di atas untuk berpura-pura bahawa ini [objek Son baru] adalah konteks ini dalam fungsi Parent untuk memanggil fungsi Parent() semasa Son() baru, oleh itu Kami mempunyai memperoleh salinan sifat dan kaedah objek induk, jadi apabila kita mengubah suai sifat dan kaedah objek induk seterusnya, ia sebenarnya salinan yang diubah suai, jadi ia mencapai kesan tidak menjejaskan semua objek kanak-kanak. Tetapi disebabkan penggunaan Son.prototype=new Parent(), kami mendapat atribut dan kaedah dua contoh Selepas kami mendapat salinan, kami hanya memerlukan prototaip objek induk hanya memerlukan prototaip getname();

dalam

S3: Langkah seterusnya ialah mengalih keluar atribut dan kaedah contoh. Ini adalah apabila pembina mula bermain. Lihat kod di bawah untuk membina semula Parent.prototype ke objek asli sebagai prototaip objek anak . Kemudian arahkan pembina ke sub-pembina

function Parent(){
   this.name='123';
   this.fruits=['apple'];
}
Parent.prototype.getName=function(){
   return this.name;
}
function Son(){
   Parent.call(this);
   this.age=20;
}
function Extend(Parent,Son){
   var proto = new Object(Parent.prototype);
   proto.constructor = Son;
   Son.prototype=proto;
}
Extend(Parent,Son);
Son.prototype.getAge=function(){
   return this.age;
}

Di atas adalah keseluruhan kandungan artikel ini, saya harap anda semua menyukainya.

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