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