javascript - masalah penunjuk ini dalam kaedah prototaip lanjutan js
漂亮男人
漂亮男人 2017-05-19 10:36:17
0
1
757

Dalam buku JavaScript Ninja Secrets, terdapat perpustakaan prototaip dan contoh kod ikatan fungsi:

Function.prototype.bind = function(){
            var fn = this, args = Array.prototype.slice.call(arguments),
                object = args.shift();
            return function(){
                  return fn.apply(object,args.concat(Array.prototype.slice.call(arguments)));
            };
        }; 
            var myObject = {a:"1"};
            function myFunction(){
                return this == myObject;
            };
            var aFunction = myFunction.bind(myObject);

            aFunction();

Saya menggunakan titik putus untuk menyemak fungsibind里面的fn指向myFunction这个函数 这个我不太理解 我的理解是只要用Function.prototype 这个原型扩展的方法 此方法里面开始声明的变量var fn=this;fn的指向就指向使用这个方法的函数 就像本例中的myFunction.bind(myObject);调用bin方法,fn指向myFunctionFungsi ini, saya tidak tahu sama ada ini cara yang betul untuk memahaminya

漂亮男人
漂亮男人

membalas semua(1)
迷茫

Sebenarnya, saya tidak begitu memahami soalan anda, jadi mari kita lihat kod dengan idea

myFunction.bind(myObject) memasuki fungsi bind prototaip

  1. Tugaskan myFunction kepada fn, tukar parameter kepada args tatasusunan, padam parameter pertama dan tetapkan ia kepada objek.

  2. Kembalikan fungsi, kemudian fikirkan tentang penutupan, dan kemudian anda akan faham. Kerja yang dilakukan oleh fungsi ini boleh difahami dengan mudah sebagai myFunction.apply(myObject,[...di sini adalah parameter lain])

aFungsi()

Ia adalah myFunction.apply(myObject,[...tidak ada parameter di sini])
Kemudian masukkan bahagian dalam myFunction, kerana hubungan antara apply, ini adalah myObject, dan kemudian kerjanya ialah myObject==myObject
Return benar

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan