Rumah hujung hadapan web tutorial js JavaScript中使用构造器创建对象无需new的情况说明_javascript技巧

JavaScript中使用构造器创建对象无需new的情况说明_javascript技巧

May 16, 2016 pm 05:55 PM
new Cipta objek

如下

复制代码 代码如下:
function Person(name, age) {
this.name = name;
this.age = age;
}
var p = new Person('lily', 20);


发现某些库代码中创建正则对象的方式无需new,这让人感到奇怪。如下
复制代码 代码如下:
var reg = RegExp('^he$');


测试发现使用或不使用new,最后返回的都是正则对象,且typeof它们都是“object”。
复制代码 代码如下:
var reg1 = new RegExp('^he$');
var reg2 = RegExp('^he$');
reg1.test('he'); // true
reg2.test('he'); // true
console.log(typeof reg1); // object
console.log(typeof reg2); // object


嗯,挺好,代码运行正常。
如果这样的话干脆就不写new了,这么还节省了代码量。其它类型也是这样吗?试试String/Number/Boolean。
复制代码 代码如下:
var str1 = new String(1);
var str2 = String(1);
var num1 = new Number('1');
var num2 = Number('1');
var boo1 = new Boolean(1);
var boo2 = Boolean(1);
console.log(typeof str1); // object
console.log(typeof str2); // string
console.log(typeof num1); // object
console.log(typeof num2); // number
console.log(typeof boo1); // object
console.log(typeof boo2); // boolean


可以看到,与正则的情况不同。正则无论是否new,typeof后都是object。
但String/Number/Boolean类型,new的对象typeof返回是“object”,不new的typeof返回则是“string”。
即不适用new的情况可以将其它类型分别转化成字符串,数字和布尔类型。

好了,再回到篇头的那个Person类。即我们自己写的类可以不用new操作符生成对象吗?
复制代码 代码如下:
function Person(name, age) {
this.name = name;
this.age = age;
}
var p = Person('lily', 20);
console.log(p); // undefined


返回undefined,很明显不行。因此想不用new的情况去创建Person实例是异想天开的。
如果非要实现呢?其实也行,如下
复制代码 代码如下:
function Person(name, age) {
this.name = name;
this.age = age;
if (this===window) {
return new Person(name, age);
}
}
var p = Person('lily', 20); // object


稍微改造了下Person类。实际上内部区分了下Person是作为构造器还是函数执行。
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menyelesaikan masalah bahawa komponen activex tidak boleh mencipta objek Bagaimana untuk menyelesaikan masalah bahawa komponen activex tidak boleh mencipta objek Jan 24, 2024 pm 02:48 PM

Penyelesaian: 1. Semak ejaan dan laluan 2. Tambah rujukan kepada komponen 3. Semak registri 5. Kemas kini atau membaiki perisian 7. Gunakan versi lain; mesej ralat; 9. Cari penyelesaian lain. Pengenalan terperinci: 1. Semak ejaan dan laluan: Pastikan tiada ralat ejaan dalam nama dan laluan objek, dan fail itu wujud dalam laluan yang ditentukan.

Bagaimana untuk membuat objek menggunakan mekanisme refleksi Java? Bagaimana untuk membuat objek menggunakan mekanisme refleksi Java? Apr 15, 2024 pm 04:18 PM

Langkah-langkah untuk mencipta objek melalui mekanisme refleksi Java adalah seperti berikut: Muatkan kelas sasaran: Gunakan kaedah Class.forName(). Dapatkan pembina: gunakan kaedah getDeclaredConstructor(). Cipta objek: Gunakan kaedah newInstance() untuk menghantar parameter.

Cara membuat dan memulakan kelas dan objek dalam bahasa Go Cara membuat dan memulakan kelas dan objek dalam bahasa Go Jul 21, 2023 pm 07:00 PM

Cara mencipta dan memulakan kelas dan objek dalam bahasa Go Walaupun bahasa Go tidak mempunyai konsep kelas dalam bahasa berorientasikan objek tradisional, kita boleh mencapai fungsi yang serupa melalui struktur dan kaedah. Dalam artikel ini, kita akan belajar cara membuat dan memulakan kelas dan objek dalam bahasa Go. 1. Tentukan struktur kelas Dalam bahasa Go, kita boleh menggunakan struktur untuk mentakrifkan atribut dan kaedah kelas. Struktur ialah jenis komposit tersuai yang boleh mengandungi berbilang medan jenis yang berbeza. Sebagai contoh, jika kita ingin melaksanakan kelas segi empat tepat, kita boleh mentakrifkannya sebagai

Bagaimana untuk menggunakan kata kunci baharu dalam java Bagaimana untuk menggunakan kata kunci baharu dalam java May 03, 2023 pm 10:16 PM

1. Konsep Dalam bahasa Java, ungkapan "baru" bertanggungjawab untuk mencipta contoh, di mana pembina dipanggil untuk memulakan contoh; jenis nilai pulangan pembina itu sendiri adalah tidak sah, bukan "pembina mengembalikan yang baru dibuat Rujukan objek", tetapi nilai ungkapan baharu ialah rujukan kepada objek yang baru dibuat. 2. Tujuan: Mencipta objek kelas baharu 3. Mekanisme kerja: Peruntukkan ruang memori untuk ahli objek, dan nyatakan nilai lalai secara eksplisit, lakukan pengiraan kaedah pembinaan, dan kembalikan nilai rujukan dengan kerap bermakna membuka yang baru dalam ingatan Ruang memori diperuntukkan dalam kawasan timbunan dalam ingatan Ia dikawal oleh jvm dan menguruskan memori secara automatik. Di sini kita menggunakan kelas String sebagai contoh. Pu

Bagaimanakah pengendali baharu berfungsi dalam js? Bagaimanakah pengendali baharu berfungsi dalam js? Feb 19, 2024 am 11:17 AM

Bagaimanakah operator baharu dalam js berfungsi? Contoh kod khusus diperlukan. Fungsinya adalah untuk mencipta objek contoh baharu berdasarkan pembina yang ditentukan dan mengembalikan rujukan kepada objek. Apabila menggunakan operator baharu, langkah berikut sebenarnya dilakukan: buat objek kosong baharu arahkan prototaip objek kosong ke objek prototaip pembina; objek); jalankan kod dalam pembina dan berikan objek baharu

Apakah perbezaan antara buat dan baharu dalam bahasa go Apakah perbezaan antara buat dan baharu dalam bahasa go Jan 09, 2023 am 11:44 AM

Perbezaan: 1. Make hanya boleh digunakan untuk memperuntukkan dan memulakan data jenis slice, map dan chan manakala baru boleh memperuntukkan sebarang jenis data. 2. Peruntukan baru mengembalikan penunjuk, iaitu jenis "*Jenis" manakala membuat pulangan rujukan, iaitu Jenis. 3. Ruang yang diperuntukkan oleh baru akan dikosongkan selepas membuat memperuntukkan ruang, ia akan dimulakan.

Bagaimana untuk menggunakan kaedah clone() dalam Java dan bukannya kata kunci baharu? Bagaimana untuk menggunakan kaedah clone() dalam Java dan bukannya kata kunci baharu? Apr 22, 2023 pm 07:55 PM

Menggunakan clone() dan bukannya new Cara paling biasa untuk mencipta contoh objek baharu dalam Java ialah menggunakan kata kunci baharu. Sokongan JDK untuk baharu sangat baik Apabila menggunakan kata kunci baharu untuk mencipta objek ringan, ia sangat pantas. Walau bagaimanapun, untuk objek berat, masa pelaksanaan pembina mungkin lebih lama kerana objek mungkin melakukan beberapa operasi yang kompleks dan memakan masa dalam pembina. Akibatnya, sistem tidak dapat memperoleh sejumlah besar kejadian dalam jangka pendek. Untuk menyelesaikan masalah ini, anda boleh menggunakan kaedah Object.clone(). Kaedah Object.clone() boleh memintas pembina dan menyalin contoh objek dengan cepat. Walau bagaimanapun, secara lalai, contoh yang dijana oleh kaedah klon() hanyalah salinan cetek objek asal.

See all articles