Rumah >hujung hadapan web >tutorial js >Perbincangan ringkas tentang penggunaan call(), apply() dan bind() dalam kemahiran javascript_javascript
Dua kaedah memanggil(thisObj, arg1, arg2...) dan apply(thisObj, [obj1, obj2...]) ialah kaedah tidak diwarisi yang disertakan dalam setiap fungsi
panggil(thisobj[, args]) dan mohon(thisobj[, args])
Kesannya adalah sama, ia menukar penunjuk ini dalam objek yang sedang menggunakan kaedah ini untuk menunjuk ke objek thisObj dalam kaedah memanggil ia diluluskan dalam kaedah panggilan Parameter yang dimasukkan disenaraikan satu demi satu, dan parameter kedua dalam kaedah guna ialah tatasusunan
Adalah lebih intuitif untuk memberikan contoh:
window.color='red'; var o={color:"blue"}; function sayColor(){ alert(this.color); }; sayColor(); //red(全局函数,this是window) sayColor.call(this);//red(调用call方法,指定对象是this,这里的this是window,没什么意义) sayColor.call(window);//red(调用call方法,指定对象是window,没什么意义) sayColor.call(o); //blue (调用call方法,指定对象是o,所以this指代对象o,这里由原来的window指向了o) sayColor.apply(o);//blue (调用call方法,指定对象是o,所以this指代对象o,这里由原来的window指向了o)
Kaedah bind() dalam ECMAScript5 adalah serupa dengan dua kaedah pertama Kaedah bind() akan mencipta instance fungsi, dan nilai instance ini akan terikat kepada nilai yang dihantar kepada. fungsi bind()
Contoh:
function a(y){ return this.x+y; }; var o={x:1}; var g=a.bind(o); g(2);//3
Ia boleh dilihat daripada contoh bahawa fungsi a terikat pada objek o dan mengembalikan fungsi baru g Apabila g dipanggil, fungsi a akan dipanggil sebagai kaedah objek o
Kaedah bind() mengikat fungsi pada objek dan mengembalikan fungsi baharu Semua parameter yang diluluskan dalam fungsi baharu ini akan dihantar ke fungsi terikat.
Mari kita lihat perbezaan mereka
Dalam JS, ketiga-tiga ini digunakan untuk menukar penunjuk objek fungsi ini.
Sebelum bercakap tentang perbezaan, mari kita ringkaskan persamaan antara ketiga-tiga:
1. Semuanya digunakan untuk menukar titik objek fungsi ini.
2. Parameter pertama ialah objek yang dituju.
3. Anda boleh menggunakan parameter seterusnya untuk lulus parameter.
Jadi apakah perbezaan mereka? Mari kita lihat contoh dahulu.
var xw = {
nama: "小王",
jantina
Umur: 24,
Sebut: function() {
alert(this.name " , " this.gender " , this year " this.age );
}
var xh = {
nama: "小红",
jantina
Umur: 18
}
xw.say();
Tidak banyak yang boleh dikatakan dalam dirinya sendiri Orang yang ditunjukkan mestilah Xiao Wang, lelaki, 24 tahun ini.
Jadi bagaimana untuk menggunakan kaedah say xw untuk memaparkan data xh.
Untuk panggilan, anda boleh melakukan ini:
Salin kod
Salin kod
Salin kod
如果直接写xw.say.bind(xh)是不会有任何结果的,看到区别了吗?call和apply都是对函数的直接调用,而bind方法返回的仍然是一个函数,因此后面还需要()来进行调用才可以。
那么call和apply有什么区别呢?我们把例子稍微改写一下。
var xw = { name : "小王", gender : "男", age : 24, say : function(school,grade) { alert(this.name + " , " + this.gender + " ,今年" + this.age + " ,在" + school + "上" + grade); } } var xh = { name : "小红", gender : "女", age : 18 }
可以看到say方法多了两个参数,我们通过call/apply的参数进行传参。
对于call来说是这样的
而对于apply来说是这样的
看到区别了吗,call后面的参数与say方法中是一一对应的,而apply的第二个参数是一个数组,数组中的元素是和say方法中一一对应的,这就是两者最大的区别。
那么bind怎么传参呢?它可以像call那样传参。
但是由于bind返回的仍然是一个函数,所以我们还可以在调用的时候再进行传参。
以上所述就是本文的全部内容了,希望大家能够喜欢、