JavaScript mempunyai mekanisme ini sendiri Dalam situasi yang berbeza, penunjuk ini berbeza.
Skop global
console.log(this); //全局变量
Skop global menggunakan ini untuk menunjuk kepada pembolehubah global, iaitu tetingkap dalam persekitaran penyemak imbas.
Nota: Mod ketat ECMAScript5 tidak mempunyai pembolehubah global, dan ini tidak ditentukan.
Fungsi panggilan
function foo() { console.log(this); } foo(); //全局变量
Panggilan dalam fungsi ini juga menunjuk kepada pembolehubah global.
Nota: Mod ketat ECMAScript5 tidak mempunyai pembolehubah global, dan ini tidak ditentukan.
Panggilan kaedah objek
var test = { foo: function () { console.log(this); } } test.foo(); //test对象
Dalam panggilan kaedah objek, ini menunjukkan kepada pemanggil.
var test = { foo: function () { console.log(this); } } var test2 = test.foo; test2(); //全局变量
Walau bagaimanapun, disebabkan ciri pengikatan lewat ini, dalam contoh di atas, ini akan menunjukkan kepada pembolehubah global, yang bersamaan dengan memanggil fungsi secara langsung.
Ini sangat penting Segmen kod yang sama hanya boleh ditentukan apabila dijalankan
Pembina
function Foo() { console.log(this); } new Foo(); //新创建的对象 console.log(foo);
Di dalam pembina, ini menunjukkan kepada objek yang baru dibuat.
Tetapkan ini secara eksplisit
function foo(a, b) { console.log(this); } var bar = {}; foo.apply(bar, [1, 2]); //bar foo.call(1, 2); //Number对象
Apabila menggunakan kaedah panggilan atau gunakan Function.prototype, bahagian dalam fungsi ini akan ditetapkan sebagai parameter pertama yang diluluskan.