Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimanakah pengendali \'baru\' dalam JavaScript berfungsi secara dalaman, dan apakah langkah utama yang terlibat dalam penciptaan objek menggunakan operator ini?

Bagaimanakah pengendali \'baru\' dalam JavaScript berfungsi secara dalaman, dan apakah langkah utama yang terlibat dalam penciptaan objek menggunakan operator ini?

DDD
DDDasal
2024-10-28 16:49:30605semak imbas

How does the

Memahami Kerja Dalaman Operator "baharu" dalam JavaScript

Dianggap sebagai salah satu aspek enigmatik JavaScript, pengendali "baru" telah menarik perhatian pembangun kerana peranannya dalam penciptaan objek. Artikel ini menyelidiki mekanisme rumit pengendali "baru", mendedahkan intipatinya melalui pelaksanaan alternatif.

Fungsi Di Sebalik Operator "baharu"

"baharu" operator secara dalaman menggunakan kaedah [[Construct]] bagi fungsi yang mengikutinya. Kaedah ini memainkan peranan penting dalam proses penciptaan objek:

  1. Permulaan Objek:

    • Ia memulakan objek JavaScript asli yang asli .
  2. Pautan Prototaip:

    • Ia mewujudkan hubungan antara sifat dalaman [[Prototaip]] objek yang baru dibuat dan sifat prototaip fungsi.
    • Jika sifat prototaip fungsi itu bukan objek, ia memilih Object.prototype sebaliknya.
  3. Seruan Fungsi :

    • Fungsi yang dikaitkan dengan pengendali "baharu" dilaksanakan, menggunakan objek yang baru dicipta sebagai nilai "ini".

Enigma Nilai Pulangan

Hasil pengendali "baharu" bergantung pada nilai pulangan fungsi yang digunakan:

  • Pulangan Primitif Nilai: Jika fungsi mengembalikan nilai primitif (cth., Nombor, Rentetan), objek yang dicipta secara dalaman dikembalikan.
  • Nilai Pemulangan Objek: Jika fungsi mengembalikan objek, objek dalaman dibuang, dan objek yang dikembalikan diutamakan.

Pelaksanaan Alternatif

Untuk memahami kerja dalaman pengendali "baharu", mari kita terokai pelaksanaan alternatif yang meniru tingkah lakunya:

<code class="javascript">function NEW(f) {
  var obj, ret, proto;

  proto = Object(f.prototype) === f.prototype ? f.prototype : Object.prototype;
  obj = Object.create(proto);
  ret = f.apply(obj, Array.prototype.slice.call(arguments, 1));

  if (Object(ret) === ret) {
    return ret;
  }
  return obj;
}</code>

Contoh Penggunaan:

<code class="javascript">function Foo (arg) {
  this.prop = arg;
}

Foo.prototype.inherited = 'baz';

var obj = NEW(Foo, 'bar');

console.log(obj.prop);          // 'bar'
console.log(obj.inherited);     // 'baz'
console.log(obj instanceof Foo); // true</code>

Kesimpulan

Melalui pelaksanaan alternatif ini, kami mendapat pemahaman yang menyeluruh tentang peranan penting pengendali "baru" dalam penciptaan objek dan penubuhan rantaian prototaip. Mekanismenya yang rumit, apabila difahami, membolehkan pembangun memanfaatkan kuasa keupayaan pengaturcaraan berorientasikan objek JavaScript.

Atas ialah kandungan terperinci Bagaimanakah pengendali \'baru\' dalam JavaScript berfungsi secara dalaman, dan apakah langkah utama yang terlibat dalam penciptaan objek menggunakan operator ini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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