Laksanakan tingkah laku penunjuk: buat penugasan semula objek atau tatasusunan kelihatan kepada kelas lain
P粉899950720
P粉899950720 2023-09-11 08:57:15
0
1
440

Pertimbangkan kod berikut:

class ClassA { constructor(positon, obj) { this.position = positon this.obj = obj } } class ClassB { constructor() { this.position = [1, 2] this.obj = { pos: [1, 2, 3], rot: [4, 5, 6] } this.classAInstance = new ClassA(this.position , this.obj) } } class ClassC { constructor(position, obj) { this.obj = obj this.position = position } reassignObj(){ this.obj = { pos: [4, 5, 6], rot: [7, 8, 9] } } resetObj() { this.obj.pos = [4, 5, 6], this.obj.rot = [7, 8, 9] } reassignPosition() { this.position = [3, 4] } resetPosition() { this.position[0] = 3 this.position[1] = 4 } } let fItem = new ClassB() let other = new ClassC(fItem.position, fItem.obj) other.resetObj() other.resetPosition() console.log('RE-SETTING') console.log('FITEM', fItem.position, fItem.obj) console.log('OTHER', other.position, other.obj) fItem = new ClassB() other = new ClassC(fItem.position, fItem.obj) other.reassignObj() other.reassignPosition() console.log('RE-ASSINGNING') console.log('FITEM', fItem.position, fItem.obj) console.log('OTHER', other.position, other.obj)

Apabila saya menetapkan semula hartanah, kelas lain boleh melihat perubahan (salinan rujukan tidak diubah). Tetapi apabila saya menetapkan semula tatasusunan atau objek, kelas lain tidak melihat perubahan itu (salinan rujukan telah berubah). Seperti yang ditunjukkan dalam output di bawah:

//重置 FITEM [ 3, 4 ] { pos: [ 4, 5, 6 ], rot: [ 7, 8, 9 ] } OTHER [ 3, 4 ] { pos: [ 4, 5, 6 ], rot: [ 7, 8, 9 ] } // 更改对其他类可见 //重新分配 FITEM [ 1, 2 ] { pos: [ 1, 2, 3 ], rot: [ 4, 5, 6 ] } OTHER [ 3, 4 ] { pos: [ 4, 5, 6 ], rot: [ 7, 8, 9 ] } // 更改对其他类不可见

Adakah terdapat cara untuk membuat perubahan kelihatan kepada kelas lain pada pengagihan semula, untuk melaksanakan gelagat penunjuk yang perubahan "kelihatan" merentas banyak kelas yang memegang rujukan?

P粉899950720
P粉899950720

membalas semua (1)
P粉605233764

Penyelesaian menggunakan getter dan setter adalah seperti berikut:

class ClassC { constructor(position, obj) { this._obj = obj this._position = position } reassignObj(){ this.obj = { pos: [4, 5, 6], rot: [7, 8, 9] } } resetObj() { this.obj.pos = [4, 5, 6], this.obj.rot = [7, 8, 9] } reassignPosition() { this.position = [3, 4] } resetPosition() { this.position[0] = 3 this.position[1] = 4 } get obj() { return this._obj } set obj(value) { this._obj.pos = value.pos this._obj.rot = value.rot } get position() { return this._position } set position(value) { this._position[0] = value[0] this._position[1] = value[1] } }
    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!