Rumah  >  Artikel  >  hujung hadapan web  >  Perbincangan ringkas tentang penggunaan call(), apply() dan bind() dalam kemahiran javascript_javascript

Perbincangan ringkas tentang penggunaan call(), apply() dan bind() dalam kemahiran javascript_javascript

WBOY
WBOYasal
2016-05-16 16:03:11838semak imbas

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


Untuk memohon anda boleh melakukan ini:

Salin kod

Kod adalah seperti berikut: xw.say.apply(xh);

Dan untuk mengikat ia perlu seperti ini:

Salin kod

Kod adalah seperti berikut: xw.say.bind(xh)();

如果直接写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来说是这样的

复制代码 代码如下:

xw.say.call(xh,"实验小学","六年级");      

而对于apply来说是这样的

复制代码 代码如下:

xw.say.apply(xh,["实验小学","六年级郑州牛皮癣医院"]);

看到区别了吗,call后面的参数与say方法中是一一对应的,而apply的第二个参数是一个数组,数组中的元素是和say方法中一一对应的,这就是两者最大的区别。
那么bind怎么传参呢?它可以像call那样传参。

复制代码 代码如下:

xw.say.bind(xh,"实验小学","六年级")();

但是由于bind返回的仍然是一个函数,所以我们还可以在调用的时候再进行传参。

复制代码 代码如下:

xw.say.bind(xh)("实验小学","六年级");

以上所述就是本文的全部内容了,希望大家能够喜欢、

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