Rumah hujung hadapan web tutorial js Bagaimanakah \'ini\' berkelakuan berbeza dalam jQuery dan JavaScript biasa, dan apakah implikasi untuk bekerja dengan elemen DOM dan panggilan fungsi?

Bagaimanakah \'ini\' berkelakuan berbeza dalam jQuery dan JavaScript biasa, dan apakah implikasi untuk bekerja dengan elemen DOM dan panggilan fungsi?

Oct 26, 2024 am 08:18 AM

How does

Memahami "ini" dalam jQuery dan JavaScript

Dalam jQuery, "ini" biasanya merujuk kepada elemen DOM yang dikaitkan dengan fungsi sedang dipanggil. Contohnya, dalam panggilan balik acara, "ini" mewakili elemen yang mencetuskan acara.

Contoh:

<code class="javascript">$("div").click(function() {
  // Here, `this` will be the DOM element for the div that was clicked,
  // so you could (for instance) set its foreground color:
  this.style.color = "red";
});</code>
Salin selepas log masuk

jQuery juga menggunakan "ini" dalam fungsi seperti html() dan each():

Contoh (html):

<code class="javascript">$("#foo div").html(function() {
  // Here, `this` will be the DOM element for each div element
  return this.className;
});</code>
Salin selepas log masuk

Contoh (setiap):

<code class="javascript">jQuery.each(["one", "two", "three"], function() {
  // Here, `this` will be the current element in the array
  alert(this);
});</code>
Salin selepas log masuk

"ini" dalam JavaScript Generik

Di luar jQuery, "ini" dalam JavaScript biasanya merujuk kepada objek. Walau bagaimanapun, ini tidak benar dalam mod ketat ES5, di mana "ini" boleh mempunyai sebarang nilai.

Nilai "ini" dalam panggilan fungsi ditentukan oleh cara fungsi itu digunakan. Ia boleh ditetapkan secara eksplisit dengan memanggil fungsi melalui sifat objek atau ia boleh lalai kepada objek global (tetingkap dalam penyemak imbas).

Contoh:

<code class="javascript">var obj = {
  firstName: "Fred",
  foo: function() {
    alert(this.firstName);
  }
};

obj.foo(); // alerts "Fred"</code>
Salin selepas log masuk

Dalam contoh ini, "ini" ditetapkan secara eksplisit kepada objek obj, supaya ia boleh mengakses sifat firstName.

Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa fungsi foo tidak terikat secara semula jadi pada mana-mana objek tertentu. Ia boleh dipanggil dengan nilai "ini" yang berbeza menggunakan fungsi seperti .call dan .apply:

<code class="javascript">function foo(arg1, arg2) {
  alert(this.firstName);
  alert(arg1);
  alert(arg2);
}

var obj = {firstName: "Wilma"};
foo.call(obj, 42, 27); // alerts "Wilma", "42", and "27"</code>
Salin selepas log masuk

Dalam contoh ini, foo dipanggil dengan objek obj sebagai "ini," membenarkannya mengakses sifat firstName.

Mod ketat ES5 memperkenalkan kerumitan lagi, membenarkan "ini" mempunyai nilai bukan objek seperti null, undefined atau primitif seperti rentetan dan nombor:

<code class="javascript">(function() {
  "use strict";   // Strict mode

  test("direct");
  test.call(5, "with 5");
  test.call(true, "with true");
  test.call("hi", "with 'hi'");

  function test(msg) {
    console.log("[Strict] " + msg + "; typeof this = " + typeof this);
  }
})();</code>
Salin selepas log masuk

Output:

[Strict] direct; typeof this = undefined
[Strict] with 5; typeof this = number
[Strict] with true; typeof this = boolean
[Strict] with 'hi'; typeof this = string
Salin selepas log masuk

Dalam mod ketat, "ini" ditentukan oleh tapak panggilan dan bukannya takrif fungsi dan ia boleh mempunyai nilai bukan objek.

Atas ialah kandungan terperinci Bagaimanakah \'ini\' berkelakuan berbeza dalam jQuery dan JavaScript biasa, dan apakah implikasi untuk bekerja dengan elemen DOM dan panggilan fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Ganti aksara rentetan dalam javascript Ganti aksara rentetan dalam javascript Mar 11, 2025 am 12:07 AM

Ganti aksara rentetan dalam javascript

jQuery mendapatkan padding/margin elemen jQuery mendapatkan padding/margin elemen Mar 01, 2025 am 08:53 AM

jQuery mendapatkan padding/margin elemen

periksa jQuery jika tarikh sah periksa jQuery jika tarikh sah Mar 01, 2025 am 08:51 AM

periksa jQuery jika tarikh sah

10 Tab Accordion JQuery 10 Tab Accordion JQuery Mar 01, 2025 am 01:34 AM

10 Tab Accordion JQuery

10 patut diperiksa plugin jQuery 10 patut diperiksa plugin jQuery Mar 01, 2025 am 01:29 AM

10 patut diperiksa plugin jQuery

Tutorial Persediaan API Carian Google Custom Tutorial Persediaan API Carian Google Custom Mar 04, 2025 am 01:06 AM

Tutorial Persediaan API Carian Google Custom

HTTP Debugging dengan Node dan HTTP-Console HTTP Debugging dengan Node dan HTTP-Console Mar 01, 2025 am 01:37 AM

HTTP Debugging dengan Node dan HTTP-Console

jQuery tambah bar scroll ke div jQuery tambah bar scroll ke div Mar 01, 2025 am 01:30 AM

jQuery tambah bar scroll ke div

See all articles