Saya seorang programmer yang cukup berpengalaman di bidang .NET dan Java, dan saya sudah mulai membaca tentang JavaScript. Saya membeli buku "The Good Parts" karya Douglas Crockford, dan saya langsung menunda beberapa hal.
Salah satunya adalah memodifikasi tipe dasar tanpa perlu:
if (typeof Object.create !== 'function') {
Object.create = function (o) { //Really... 'o'? For a parameter you're only using twice?
function F() {}
F.prototype = o;
return new F();
};
}
newObject = Object.create(oldObject);
Jelas membuat fungsi dengan tujuan ini berguna dan menghemat waktu, tetapi MENGAPA DI BUMI dia merekomendasikan membuatnya di Object? Tiga napas yang lalu ia menganut bahwa global adalah jahat, dan kemudian ia melanjutkan ke Object patch monyet. Dia bahkan menguji apakah sudah ada, dan hanya berasumsi bahwa jika beberapa perpustakaan lain melakukannya untuknya implementasinya sama.
Apakah ada alasan untuk tidak membuat ini dalam JS yang setara dengan namespace? yaitu
MY_UNIQUE_UTIL_LIBRARY.create = function(obj){...}; //The name would be shorter in reality.
Jangan salah paham, saya pikir tambalan monyet berguna, tapi itu sesuatu yang Anda lakukan ketika ada manfaat yang melekat. Saya tidak melihatnya di sini? Apakah ada satu?
Jawaban:
Object.create
didefinisikan dalam versi browser yang lebih baru (tidak bisa mengatakan dengan tepat sejak kapan). Anda dapat melihat deskripsinya di jaringan pengembang Mozilla .Ini hanya polyfill (sangat mirip dengan yang ada di halaman itu, dengan beberapa cek lebih sedikit) untuk dapat menggunakan fungsi yang sama pada browser lama. Pada peramban yang lebih baru, ia sudah didefinisikan sebagai fungsi dan karenanya akan menggunakan versi peramban yang dioptimalkan, sedangkan pada peramban yang lebih lama, peramban itu secara default tidak ditentukan dan akan menggunakan versi ini.
sumber
Object.create
mendahului ES5, jadi jawaban ini secara kronologis salah.beget
dan dia mendefinisikannya dalam lingkup apa pun dia berada dan tidak aktifObject
- jadi jawaban ini tidak benar-benar salah secara kronologis.