Rumah >hujung hadapan web >tutorial js >Penjelasan terperinci tentang ini dalam kemahiran javascript_javascript

Penjelasan terperinci tentang ini dalam kemahiran javascript_javascript

WBOY
WBOYasal
2016-05-16 16:28:151290semak imbas

Objek ini sentiasa menjadi perangkap dalam js. Sukar untuk menilai perkara yang ditunjukkannya, dan kami sering melakukan kesilapan jenis ini disebabkan pengalaman kami dengan diri daripada C atau python. Seterusnya, mari bercakap tentang pemilikan objek ini secara terperinci.

peraturan1: ini

persekitaran global

Persekitaran JavaScript secara semula jadi ditentukan oleh fungsi Dalam JS, konteks tidak boleh dipisahkan oleh blok kod Persekitaran yang tidak dibalut oleh fungsi ialah persekitaran global Lihat contoh berikut

Salin kod Kod adalah seperti berikut:
var name='jjj';
console.log(nama.ini);
//akan berjaya mengeluarkan jjj

peraturan2: ini apabila dipanggil sebagai kaedah

Jelas sekali, keadaan ini mudah dinilai. Ia konsisten dengan diri dalam ular sawa Ini sudah pasti menunjuk kepada objek yang memanggil kaedah

Salin kod Kod adalah seperti berikut:
var pengguna={
Nama:'kkk'
};
user.getName=function(){
console.log(nama.ini);
};
user.getName();
//akan outputkkk

peraturan3: ini apabila digunakan sebagai pembina

Tidak perlu dikatakan, ini pada masa ini jelas menunjukkan kepada objek yang baru dibuat Larian pembina sebenarnya tidak mencipta objek, tetapi hanya memulakan objek itu sebelum dijalankan

Berikut ialah beberapa contoh

Salin kod Kod adalah seperti berikut:
fungsi Pengguna(nama){
This.name=name;
}
var f1=Pengguna baharu('kkk');
var f2=Pengguna('kkk');
console.log(f1.name);//kkk
console.log(f2.name);//undefined tidak mempunyai atribut nama

peraturan4: ini dalam panggilan tidak langsung

Panggilan tidak langsung yang dipanggil merujuk kepada menggunakan fungsi guna dan panggilan ke panggilan Pada masa ini, ini menunjukkan parameter pertama dalam senarai parameternya.

Salin kod Kod adalah seperti berikut:
var setName=function(name){
This.name=name;
};
var user={level:2};
user.apply(setName,'jjj');
console.log(user.name);//jjj

peraturan5: ini dalam situasi lain

Ingat bahawa ini tidak akan diubah dalam kes lain, di sinilah kemungkinan besar kesilapan berlaku.

Salin kod Kod adalah seperti berikut:
var name = "pengkod pintar";
var orang = {
nama : "foocoder",
Helo: function(sth){
        var sayhello = fungsi(sth) {
console.log(this.name " says " sth);
        };
          sayhello(sth);
}
}
person.hello("hello world");//pengkode pandai berkata hello world

Kod di atas kelihatan pelik bukan?

Kita harus ingat bahawa ini dalam fungsi bersarang tidak akan menunjuk ke fungsi di mana ia bersarang Dalam contoh ini, ini dalam sayhello tidak akan menunjuk ke fungsi yang sepadan dengan hello. Jika kita ubah sedikit contoh menjadi

Salin kod Kod adalah seperti berikut:
helo:function(sth){
console.log(this.name " says " sth);
}
//foocoder menyapa dunia

Semua orang sepatutnya faham bahawa pada masa ini, sayhello tidak dipanggil sebagai kaedah, jadi ini menunjukkan objek global. . .

Pada masa ini, masalah datang Apabila menjalankan contoh awal menggunakan nod, ia akan memaparkan undefined says hello world Saya tertanya-tanya jika sesiapa boleh menerangkannya.

peraturan6:eval melanggar semua peraturan

Akhir sekali diakhiri dengan contoh

Salin kod Kod adalah seperti berikut:

var name = "pengkod pintar";
var pengguna={
Nama:'kkk'
};
user.getName=function(){
console.log(nama.ini);
};
var get=user.getName;
get();//pandai pengekod

Adakah anda faham?

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