Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimanakah Operator JavaScript \"baru\" Mengerjakan Keajaibannya?

Bagaimanakah Operator JavaScript \"baru\" Mengerjakan Keajaibannya?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-28 12:56:01483semak imbas

How Does the JavaScript

Merungkai Enigma Operator "baharu" JavaScript

Dalam kedalaman kerumitan JavaScript terdapat binaan misteri yang paling terkenal kerana potensinya untuk membingungkan: "baru" pengendali. Kerjanya yang keruh berdiri di samping rantai prototaip, menyebabkan ramai yang tersesat dalam labirin kod.

Menyelidiki Mekanisme Operator Baharu

Untuk mendedahkan rahsia "baru " pengendali, mari kita membedah operasinya yang rumit:

  • Ia bercanggah dengan kaedah [[Construct]] dalaman, kuasa yang tidak kelihatan dalam JavaScript.
  • [[Construct]] dengan teliti menghasilkan yang asli objek dengan sifat asli.
  • Tarian halus berlaku, di mana [[Prototaip]] objek ditambat pada prototaip Fungsi. Melainkan fungsi itu tidak mempunyai prototaip objek (menurunkannya kepada nilai primitif), Object.prototype dengan sopan melangkah masuk untuk membimbing objek.
  • Pengendali "baharu" kemudian mengatur seruan besar fungsi itu, memberikannya objek yang baru dicipta sebagai nilai "ini".
  • Timbul persimpangan penting: jika fungsi menghasilkan nilai primitif, objek yang dihasilkan secara dalaman mengambil tempat di tengah-tengah. Walau bagaimanapun, jika objek dikembalikan, objek asal akan dilupakan.

Kanta Alternatif

Untuk memberi penerangan lanjut tentang "baharu" yang penuh teka-teki pengendali, mari kita terokai pelaksanaan alternatif yang mencerminkan tindakannya:

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

  // Prototype verification
  proto = Object(f.prototype) === f.prototype ? f.prototype : Object.prototype;

  // Object inheritance from `proto`
  obj = Object.create(proto);

  // Function invocation with object as "this"
  ret = f.apply(obj, Array.prototype.slice.call(arguments, 1));

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

// Demonstration:
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>

Kod ini berfungsi sebagai suar, menerangkan cara pengendali "baharu" tekun melaksanakan tugasnya di belakang tabir.

Atas ialah kandungan terperinci Bagaimanakah Operator JavaScript \"baru\" Mengerjakan Keajaibannya?. 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