Objek ini selalu menjadi jebakan di JS, dan sulit untuk menilai apa yang ditunjukkannya. Kami sering membuat kesalahan semacam ini karena pengalaman kami dari C ++ atau Python. Selanjutnya, mari kita bicara tentang kepemilikan objek ini secara rinci.
aturan1: ini di lingkungan global
Lingkungan JavaScript secara inheren ditentukan oleh fungsi. Dalam JS, konteksnya tidak dapat dipisahkan oleh blok kode. Lingkungan yang tidak dibungkus oleh fungsi adalah lingkungan global. Ini di lingkungan global menunjuk ke jendela variabel global. Lihat contoh berikut
Salinan kode adalah sebagai berikut:
var name = 'jjj';
console.log (this.name);
// JJJ akan berhasil output
aturan2: ini saat dipanggil sebagai metode
Jelas situasi ini mudah dinilai, konsisten dengan diri sendiri dalam Python. Ini tidak diragukan lagi menunjuk ke objek yang memanggil metode ini
Salinan kode adalah sebagai berikut:
var user = {
Nama: 'KKK'
};
user.getName = function () {
console.log (this.name);
};
user.getName ();
// output kkk akan menjadi output
aturan3: ini saat sebagai konstruktor
Saya tidak perlu banyak bicara tentang ini saat ini. Ini jelas menunjuk pada objek yang baru dibuat. Pengoperasian konstruktor tidak benar -benar membuat objek, tetapi hanya inisialisasi. Objek dibuat sebelum dijalankan.
Berikut adalah beberapa contoh
Salinan kode adalah sebagai berikut:
function user (name) {
this.name = name;
}
var f1 = pengguna baru ('kkk');
var f2 = user ('kkk');
console.log (f1.name); // kkk
Console.log (f2.name); // Undefined tidak memiliki atribut nama
aturan4: panggilan tidak langsung ini
Panggilan tidak langsung yang disebut mengacu pada menggunakan fungsi Apply dan Call to Call, dan ini menunjuk ke parameter pertama dalam daftar parameternya.
Salinan kode adalah sebagai berikut:
var setName = function (name) {
this.name = name;
};
var user = {level: 2};
user.apply (setName, 'jjj');
console.log (user.name); // jjj
aturan5: ini dalam kasus lain
Ingatlah bahwa ini tidak akan diubah dalam situasi lain, dan ini juga tempat termudah untuk membuat kesalahan.
Salinan kode adalah sebagai berikut:
var name = "Clever Coder";
var person = {
Nama: "Foocoder",
halo: function (sth) {
var wayshello = function (sth) {
console.log (this.name + "mengatakan" + sth);
};
Sayhello (STH);
}
}
person.hello ("halo dunia"); // coder pintar menyapa dunia
Kode di atas terlihat aneh, bukankah seharusnya hal ini menjadi orang?
Kita harus ingat bahwa ini dalam fungsi bersarang tidak akan menunjukkan fungsi yang bersarang. Dalam contoh ini, ini di Sayshello tidak akan menunjukkan fungsi yang sesuai dengan Hello. Jika kita sedikit mengubah contoh
Salinan kode adalah sebagai berikut:
halo: function (sth) {
console.log (this.name + "mengatakan" + sth);
}
// foocoder menyapa dunia
Setiap orang seharusnya mengerti bahwa pada saat ini, Sayhello tidak memanggil sebagai metode, jadi ini menunjuk pada objek global. . .
Pada saat ini, masalahnya adalah contoh awal menggunakan Node to Run akan menunjukkan Says Hello World yang tidak ditentukan. Saya ingin tahu apakah ada master untuk menjelaskannya.
aturan6: eval melanggar semua aturan
Akhirnya akhiri dengan sebuah contoh
Salinan kode adalah sebagai berikut:
var name = "Clever Coder";
var user = {
Nama: 'KKK'
};
user.getName = function () {
console.log (this.name);
};
var get = user.getName;
get (); // coder pintar
Apakah kamu mengerti?