Kaedah untuk menukar penunjuk ini dalam kemahiran JS (panggil, gunakan, ikat)_javascript

WBOY
Lepaskan: 2016-05-16 15:08:08
asal
1895 orang telah melayarinya

Ini ialah kata kunci dalam JavaScript Nilai ini akan berubah apabila fungsi digunakan dalam situasi yang berbeza. Tetapi sentiasa ada prinsip, iaitu, ini merujuk kepada objek yang memanggil fungsi tersebut.

Ini secara amnya menunjuk kepada penerima semasa, tetapi ia juga boleh ditukar dengan cara lain Tiga kaedah akan diperkenalkan di bawah:

1. Apabila digunakan sebagai warisan:

function Parent(age){
this.name=['mike','jack','smith'];
this.age=age;
}
function Child(age){
Parent.call(this,age);//把this指向Parent,同时还可以传递参数
}
var test=new Child(21);
console.log(test.age);//21
console.log(test.name);
test.name.push('bill');
console.log(test.name);//mike,jack,smith,bill
Salin selepas log masuk

2 kedua-dua panggilan dan gunakan boleh menukar ini untuk menunjuk kepada , tetapi parameter kedua permohonan ialah pengedaran cincang, dan panggilan boleh menjadi tatasusunan

console.log(Math.max.apply(null,[1,2,3,4]));//4
Salin selepas log masuk
Kaedah

apply() menerima dua parameter: satu ialah skop untuk menjalankan fungsi dan satu lagi ialah tatasusunan parameter. Antaranya, parameter kedua boleh menjadi contoh Array atau objek argumen. Kaedah call() mempunyai kesan yang sama seperti kaedah apply(), mereka hanya berbeza dalam cara mereka menerima parameter. Untuk panggilan()
Setakat kaedah berkenaan, nilai ini parameter pertama tidak berubah. Apa yang berubah ialah parameter yang selebihnya dihantar terus ke fungsi. Dalam erti kata lain, apabila menggunakan kaedah panggilan(), parameter yang dihantar ke fungsi mesti dihitung satu persatu.

3.ES5 juga mentakrifkan kaedah : bind(), yang akan mencipta contoh fungsi, dan nilai ini akan terikat pada nilai fungsi bind() . Seperti

window.color='red';
var o={color:'blue'};

function sayColor(){
console.log(this.color);
}
var objectSaycolor=sayColor.bind(o);
//var objectSaycolor=sayColor.bind();
objectSaycolor();//blue
Salin selepas log masuk

Di sini sayColor() memanggil bind() dan lulus dalam objek o, mencipta fungsi objectSayColor(). Nilai fungsi objectSayColor() ini adalah sama dengan o, jadi walaupun fungsi ini dipanggil dalam skop global, anda akan melihat warna biru.

Di atas ialah kaedah yang diperkenalkan oleh editor kepada anda untuk menukar penunjuk ini dalam JS (panggil, mohon, ikat).

Saya masih mempunyai sedikit masa untuk menambah pengetahuan asas kepada anda: perbezaan antara call() dan apply()

1. Definisi kaedah

kaedah panggilan:

Sintaks: panggil(thisObj, Object)

Definisi: Panggil kaedah objek untuk menggantikan objek semasa dengan objek lain.

Arahan:

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 tiada parameter thisObj disediakan, objek Global digunakan sebagai thisObj.

gunakan kaedah:

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 berlaku.
Jika argArray mahupun thisObj tidak disediakan, objek Global akan digunakan sebagai thisObj dan tiada parameter boleh dilalui.

Contoh kod:

function Animal(name) {
   this.name = name;
   this.showName = function() {
     console.log(this.name);
   };
 }
 function Cat(name) {
   Animal.call(this, name);
 }
 Cat.prototype = new Animal();
 function Dog(name) {
   Animal.apply(this, name);
 }
 Dog.prototype = new Animal();
 var cat = new Cat("Black Cat"); //call必须是object
 var dog = new Dog(["Black Dog"]); //apply必须是array
 cat.showName();
 dog.showName();
 console.log(cat instanceof Animal);
 console.log(dog instanceof Animal);
Salin selepas log masuk

Simulasikan panggilan, gunakan penggantian ini

 function Animal(name) {
   this.name = name;
   this.showName = function() {
     alert(this.name);
   };
 };
 function Cat(name) {
   this.superClass = Animal;
   this.superClass(name);
   delete superClass;
 }
 var cat = new Cat("Black Cat");
 cat.showName();
Salin selepas log masuk
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