Rumah  >  Artikel  >  hujung hadapan web  >  Adakah anda tahu apa yang js lakukan apabila objek baharu?

Adakah anda tahu apa yang js lakukan apabila objek baharu?

藏色散人
藏色散人ke hadapan
2023-04-18 15:36:451985semak imbas

Prakata

Dalam JavaScript, objek instance boleh dibuat melalui operator baharu, dan objek instance ini mewarisi sifat dan kaedah objek asal. Oleh itu, kepentingan kewujudan baharu ialah ia melaksanakan pewarisan dalam JavaScript, bukan sekadar membuat seketika objek.

Peranan baru

Mari kita fahami dahulu peranan new melalui contoh-contohnya seperti berikut:

function Person(name) {
  this.name = name
}
Person.prototype.sayName = function () {
  console.log(this.name)
}
const t = new Person('小明')
console.log(t.name)  // 小明
t.sayName()  // 小明

Daripada contoh di atas kita boleh lukis. kesimpulan berikut :

  • new Objek contoh yang dicipta melalui pembina Person boleh mengakses sifat dalam pembina.

  • new Contoh yang dibuat melalui pembina Person boleh mengakses sifat dalam rantai prototaip pembina, iaitu melalui operator new, contoh dan pembina Connected melalui rantaian prototaip.

Pembina Person tidak secara eksplisit return mempunyai sebarang nilai (mengembalikan undefined secara lalai), apakah yang akan berlaku jika kita membiarkannya mengembalikan nilai?

function Person(name) {
  this.name = name
  return 1
}
const t = new Person('小明')
console.log(t.name)  // 小明

mengembalikan 1 dalam pembina dalam contoh di atas, tetapi nilai pulangan ini tidak berguna dan hasilnya adalah sama seperti contoh sebelumnya. Kita boleh membuat kesimpulan lain: Jika pembina

mengembalikan nilai asal, maka nilai pulangan tidak bermakna.

Mari cuba apa yang berlaku apabila mengembalikan objek:

function Person(name) {
  this.name = name
  return {age: 23}
}
const t = new Person('小明')
console.log(t)  // { age: 23 }
console.log(t.name)  // undefined

Melalui contoh di atas kita dapati bahawa apabila nilai pulangan ialah objek, nilai pulangan akan menjadi normal kembali keluar. Kami sekali lagi membuat kesimpulan:

Jika nilai pulangan pembina ialah objek, maka nilai pulangan akan digunakan secara normal.

Ringkasan: Kedua-dua contoh ini memberitahu kita bahawa pembina harus cuba untuk tidak mengembalikan nilai. Kerana mengembalikan nilai asal tidak akan berkuat kuasa, mengembalikan objek akan menyebabkan pengendali baharu tidak mempunyai kesan.

Untuk melaksanakan baharu

Mula-mula kita perlu tahu apa yang js lakukan apabila menggunakan operator new:

  1. js mencipta objek secara dalaman
  2. Objek ini boleh mengakses sifat pada prototaip pembina, jadi objek itu perlu disambungkan kepada pembina
  3. Ini di dalam pembina diberikan kepada objek baharu ini (iaitu, ini menunjuk kepada objek baharu )
  4. Pengembalian nilai asal perlu diabaikan, dan objek yang dikembalikan perlu diproses secara normal

Setelah mengetahui langkah-langkahnya, kita boleh mula melaksanakan fungsi baharu:

function _new(fn, ...args) {
  const newObj = Object.create(fn.prototype);
  const value = fn.apply(newObj, args);
  return value instanceof Object ? value : newObj;
}

Contoh ujian adalah seperti berikut:

function Person(name) {
  this.name = name;
}
Person.prototype.sayName = function () {
  console.log(this.name);
};

const t = _new(Person, "小明");
console.log(t.name);  // 小明
t.sayName();  // 小明

Di atas adalah mengenai peranan operator baharu dalam JavaScript dan cara melaksanakan pengendali baharu.

Atas ialah kandungan terperinci Adakah anda tahu apa yang js lakukan apabila objek baharu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:juejin.im. Jika ada pelanggaran, sila hubungi admin@php.cn Padam