Bagaimanakah pengendali `baru` berfungsi dalam JavaScript dan bagaimana ia mencipta objek dengan rantai prototaipnya?

Patricia Arquette
Lepaskan: 2024-10-27 21:28:30
asal
193 orang telah melayarinya

How does the `new` operator work in JavaScript, and how does it create objects with their prototype chains?

Bagaimanakah pengendali baharu berfungsi dalam JavaScript?

Pengendali baharu memainkan peranan penting dalam sistem pengaturcaraan berorientasikan objek JavaScript. Adalah penting untuk memahami fungsinya untuk mencipta dan mengurus objek dengan berkesan.

Menyelami Pelaksanaan Operator baharu

<code class="javascript">new dataObj(args);</code>
Salin selepas log masuk

Coretan kod ini menggunakan [[ Bina]] kaedah untuk menjalankan satu siri tindakan khusus:

  1. Penciptaan Objek: Ia memulakan objek asli baharu.
  2. Penubuhan Rantaian Prototaip : [[Prototaip]] dalaman objek ini ditetapkan untuk menghala ke arah sifat prototaip Fungsi. Terutama, jika sifat prototaip Fungsi bukan objek (nilai primitif seperti Nombor, String, Boolean, Tidak Ditakrifkan atau Null), Object.prototype sebaliknya digunakan sebagai prototaip.
  3. Seruan Fungsi: Selepas penciptaan objek, fungsi dipanggil dengan objek yang baru dicipta ditetapkan sebagai nilai ini.
  4. Pengendalian Nilai Pulangan: Jika nilai pulangan fungsi yang dipanggil menghasilkan primitif , objek yang dibuat secara dalaman dikembalikan. Walau bagaimanapun, jika objek dikembalikan, objek yang dicipta secara dalaman akan dibuang.

Pelaksanaan Alternatif untuk Kejelasan

Untuk meningkatkan pemahaman, berikut ialah perwakilan alternatif bagi perkara yang dicapai oleh pengendali baharu:

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

  // Check if `f.prototype` is an object, not a primitive
  proto = Object(f.prototype) === f.prototype ? f.prototype : Object.prototype;

  // Create an object that inherits from `proto`
  obj = Object.create(proto);

  // Apply the function setting `obj` as the `this` value
  ret = f.apply(obj, Array.prototype.slice.call(arguments, 1));

  if (Object(ret) === ret) { // the result is an object?
    return ret;
  }
  return obj;
}

// Example usage:
function Foo (arg) {
  this.prop = arg;
}
Foo.prototype.inherited = 'baz';

var obj = NEW(Foo, 'bar');
obj.prop; // 'bar'
obj.inherited; // 'baz'
obj instanceof Foo // true</code>
Salin selepas log masuk

Dalam contoh ini:

  • NEW ialah fungsi tersuai yang menyerupai gelagat pengendali baharu.
  • Ia menyemak jika sifat prototaip Fungsi ialah objek,否则使用 Object.prototype 来创建新对象。
  • NEW menggunakan fungsi pada objek yang baru dicipta kerana nilai ini.
  • Nilai pulangan fungsi menentukan objek akhir yang akan dikembalikan.

Atas ialah kandungan terperinci Bagaimanakah pengendali `baru` berfungsi dalam JavaScript dan bagaimana ia mencipta objek dengan rantai prototaipnya?. 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!