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.
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 pembinaPerson
boleh mengakses sifat dalam pembina.
new
Contoh yang dibuat melalui pembinaPerson
boleh mengakses sifat dalam rantai prototaip pembina, iaitu melalui operatornew
, 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.
Mula-mula kita perlu tahu apa yang js lakukan apabila menggunakan operator new
:
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!