Rumah >hujung hadapan web >tutorial js >Bagaimanakah Pengendali `baru` dalam JavaScript Mencipta Objek dan Mewujudkan Warisannya?

Bagaimanakah Pengendali `baru` dalam JavaScript Mencipta Objek dan Mewujudkan Warisannya?

Linda Hamilton
Linda Hamiltonasal
2024-10-27 01:46:30724semak imbas

How Does the `new` Operator in JavaScript Create Objects and Establish Their Inheritance?

Menyahmistikan Kerja Dalaman Operator baharu dalam JavaScript

Rupa bumi JavaScript yang salah faham, serupa dengan rantaian prototaip, mendedahkan pertanyaan asas : bagaimanakah pengendali "baharu" mengatur penciptaan objek, mentakrifkan keturunan dan atribut teras mereka?

Intipati baharu

Untuk merungkai enigma ini, pertimbangkan ilustrasi alternatif :

function NEW(f) {
  var obj, ret, proto;

  // Examine `f.prototype`
  proto = Object(f.prototype) === f.prototype ? f.prototype : Object.prototype;

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

  // Invoke `f` with `obj` as `this`
  ret = f.apply(obj, Array.prototype.slice.call(arguments, 1));

  // Determine return type
  if (Object(ret) === ret) { // Object returned?
    return ret;
  }

  // Otherwise, return inherited object
  return obj;
}

Memahami Mekanisme

Pengendali baharu bergantung pada mekanisme [[Construct]] dalaman, iaitu:

  1. Mencipta objek asli.
  2. Menetapkan [[Prototaip]]nya kepada prototaip fungsi atau Object.prototype (jika prototaip itu primitif).
  3. Memanggil fungsi dengan objek sebagai "ini. "
  4. Mengembalikan objek yang dicipta secara dalaman jika fungsi mengembalikan primitif, atau objek yang dikembalikan oleh fungsi jika ia mengembalikan objek.

Aplikasi Praktikal

Menunjukkan kuasa konsep ini:

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

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

Ini mencipta objek yang diwarisi daripada Foo, dengan harta warisan "diwarisi" dan harta "prop" dengan nilai "bar."

Atas ialah kandungan terperinci Bagaimanakah Pengendali `baru` dalam JavaScript Mencipta Objek dan Mewujudkan Warisannya?. 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