Menyahmistikan Kerja Dalaman Operator baharu dalam JavaScript
Rupa bumi JavaScript yang salah faham, serupa dengan rantaian prototaip, mendedahkan pertanyaan asas : bagaimanakah pengendali "baharu" mengatur penciptaan objek, mentakrifkan keturunan dan atribut teras mereka?
Intipati baharu
Untuk merungkai enigma ini, pertimbangkan ilustrasi alternatif :
function NEW(f) { var obj, ret, proto; // Examine `f.prototype` proto = Object(f.prototype) === f.prototype ? f.prototype : Object.prototype; // Inherit from `proto` obj = Object.create(proto); // Invoke `f` with `obj` as `this` ret = f.apply(obj, Array.prototype.slice.call(arguments, 1)); // Determine return type if (Object(ret) === ret) { // Object returned? return ret; } // Otherwise, return inherited object return obj; }
Memahami Mekanisme
Pengendali baharu bergantung pada mekanisme [[Construct]] dalaman, iaitu:
Aplikasi Praktikal
Menunjukkan kuasa konsep ini:
function Foo(arg) { this.prop = arg; } Foo.prototype.inherited = 'baz'; var obj = NEW(Foo, 'bar');
Ini mencipta objek yang diwarisi daripada Foo, dengan harta warisan "diwarisi" dan harta "prop" dengan nilai "bar."
Atas ialah kandungan terperinci Bagaimanakah Pengendali `baru` dalam JavaScript Mencipta Objek dan Mewujudkan Warisannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!