Bagaimanakah Operator JavaScript \'baru\' Mengerjakan Keajaibannya?

Mary-Kate Olsen
Lepaskan: 2024-10-28 12:56:01
asal
482 orang telah melayarinya

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>
Salin selepas log masuk

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!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!