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
Lepaskan: 2024-10-27 01:46:30
asal
811 orang telah melayarinya

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

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

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 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan