Adakah anda tahu apa yang js lakukan apabila objek baharu?

藏色散人
Lepaskan: 2023-04-18 15:36:45
ke hadapan
2004 orang telah melayarinya

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()  // 小明
Salin selepas log masuk

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)  // 小明
Salin selepas log masuk

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

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

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();  // 小明
Salin selepas log masuk

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!

Label berkaitan:
sumber:juejin.im
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!