Perbandingan penggunaan kaedah panggilan dan gunakan kaedah dalam pengetahuan JavaScript_Basic

WBOY
Lepaskan: 2016-05-16 15:45:34
asal
1461 orang telah melayarinya

Takrif kaedah
kaedah panggilan:
Sintaks: panggil([thisObj[,arg1[, arg2[, [,.argN]]]]])
Definisi: Panggil kaedah objek untuk menggantikan objek semasa dengan objek lain.
Penerangan:
Kaedah panggilan boleh digunakan untuk memanggil kaedah bagi pihak objek lain. Kaedah panggilan menukar konteks objek fungsi daripada konteks awal kepada objek baharu yang ditentukan oleh thisObj.
Jika parameter thisObj tidak disediakan, objek Global digunakan sebagai thisObj.

kaedah pakai:
Sintaks: apply([thisObj[,argArray]])
Definisi: Gunakan kaedah objek untuk menggantikan objek semasa dengan objek lain.
Penerangan:
Jika argArray bukan tatasusunan yang sah atau bukan objek argumen, TypeError akan disebabkan.
Jika argArray mahupun thisObj tidak disediakan, objek Global akan digunakan sebagai thisObj dan tiada parameter boleh dilalui.

Contoh biasa
a、

function add(a,b) 
{ 
 alert(a+b); 
} 
function sub(a,b) 
{ 
 alert(a-b); 
} 
 
add.call(sub,3,1); 
Salin selepas log masuk

Maksud contoh ini ialah menggantikan sub dengan add, add.call(sub,3,1) == add(3,1), jadi hasil yang dijalankan ialah: alert(4); Fungsi sebenarnya adalah objek, dan nama fungsi adalah rujukan kepada objek Fungsi.

b.

function Animal(){ 
 this.name = "Animal"; 
 this.showName = function(){ 
  alert(this.name); 
 } 
} 
 
function Cat(){ 
 this.name = "Cat"; 
} 
 
var animal = new Animal(); 
var cat = new Cat(); 
 
//通过call或apply方法,将原本属于Animal对象的showName()方法交给对象cat来使用了。 
//输入结果为"Cat" 
animal.showName.call(cat,","); 
//animal.showName.apply(cat,[]); 
Salin selepas log masuk

panggilan bermaksud meletakkan kaedah haiwan pada kucing untuk pelaksanaan Pada asalnya, kucing tidak mempunyai kaedah showName() Sekarang, kaedah showName() haiwan diletakkan pada kucing untuk pelaksanaan, jadi nama ini sepatutnya menjadi Cat

c. Melaksanakan pewarisan

function Animal(name){  
 this.name = name;  
 this.showName = function(){  
  alert(this.name);  
 }  
}  
 
function Cat(name){ 
 Animal.call(this, name); 
}  
 
var cat = new Cat("Black Cat");  
cat.showName(); 
Salin selepas log masuk

Animal.call(this) bermaksud menggunakan objek Animal dan bukannya objek ini. Bukankah Cat mempunyai semua sifat dan kaedah Haiwan boleh memanggil kaedah dan sifat Haiwan
d. Pewarisan berbilang

function Class10() 
{ 
 this.showSub = function(a,b) 
 { 
  alert(a-b); 
 } 
} 
 
function Class11() 
{ 
 this.showAdd = function(a,b) 
 { 
  alert(a+b); 
 } 
} 
 
function Class2() 
{ 
 Class10.call(this); 
 Class11.call(this); 
} 
Salin selepas log masuk
Ia sangat mudah, gunakan dua panggilan untuk mencapai berbilang warisan

Sudah tentu, terdapat cara lain untuk mewarisi js, seperti menggunakan rantaian prototaip Ini bukan dalam skop artikel ini. Saya hanya menerangkan penggunaan panggilan di sini. Bercakap tentang panggilan, dan sudah tentu terpakai, kedua-dua kaedah ini pada asasnya bermaksud perkara yang sama Perbezaannya ialah parameter panggilan kedua boleh dari mana-mana jenis, manakala parameter kedua permohonan mestilah array, atau ia boleh menjadi argumen<. 🎜>
Kaedah panggilan dan guna dalam JavaScript digunakan terutamanya untuk menukar konteks objek fungsi, iaitu kandungan yang ditunjukkan oleh ini dalam fungsi.

Kaedah panggilan adalah seperti berikut:

fun.call(obj1, arg1, arg2, ...);
fun.apply(obj2, [arrs]);

Salin selepas log masuk
Contoh khusus:

var Obj1 = {
 name: 'Object1',
 say: function(p1, p2) {
  console.log(this.name + ' says ' + p1 + ' ' + p2);
 }
};

// logs 'Object1 says Good morning'
Obj1.say('Good', 'morning');

var Obj2 = {
 name: 'Object2'
};

// logs 'Object2 says Good afternoon'
Obj1.say.call(Obj2, 'Good', 'afternoon');

// logs 'Object2 says Good afternoon again'
Obj1.say.apply(Obj2, ['Good', 'afternoon again']);

Salin selepas log masuk
Seperti yang dapat dilihat daripada contoh, apabila memanggil sebut melalui kaedah konvensional, ini dalam kaedah menunjuk kepada Obj1, tetapi apabila memanggil melalui panggilan dan memohon, ini menunjukkan kepada Obj2.

Seperti yang dapat dilihat daripada contoh, fungsi panggilan dan guna adalah sama, dan perbezaan dalam kaedah panggilan mereka hanyalah senarai parameter.

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan