回应模式 - No.62357332


No.62357332 - 技术宅


无标题无名氏No.62357332 只看PO

2024-05-12(日)15:37:42 ID:TPWHppd 回应

肥哥们,我现在在做一款小游戏的开发,我们有一个需求是在某些特定的时刻触发指定的函数,并且这个指定的函数要能够被修改

Tips无名氏No.9999999

2099-01-01 00:00:01 ID: Tips

( `д´)现充,杀!杀!杀!

无标题无名氏No.62357384

2024-05-12(日)15:43:17 ID: TPWHppd (PO主)

我现在的做法是用两个文件分别放置对象的属性键值对,和对象对应的各类函数

比如bug_lib.json里存放了“工蚁”的属性,然后bug_func_lib.js里通过变量存放“工蚁”对象的函数键值对,如图所示

然后创建“工蚁”对象的时候会把这个json里的属性填装到class的生成函数里,然后绑定上对应的js文件里的函数

在这之后如果有需要触发指定函数的时候,就调用绑定在对象内部的指定函数就行了

但现在的问题是我们需要在某些情况下对一个对象的某些函数进行修改,但是我发现直接修改函数对象的话,会导致其他有着相同函数对象的对象的函数也跟着修改,似乎修改的是js文件里的变量的值,我猜测这个是因为js里面的绑定用的是指针

我本来打算用深拷贝复制一个函数对象然后绑定的,但是如果每一个对象都有一个完整的函数对象的话,之后的优化可能会出一些问题

我们目前比较理想的方法就是只修改对象绑定的指定的函数的指针情况,其他的函数继续绑定对应的对象指针,但是不知道这个要怎么实现呢|-` )

无标题无名氏No.62385830

2024-05-14(二)19:19:47 ID: 70V5d50

>>No.62357384
是纯c++吗,肥遇到这类问题会选择用观察者模式|∀゚

无标题无名氏No.62392939

2024-05-15(三)10:20:03 ID: j3lJQyS

一般这种情况可以使用策略模式,将函数设置为可配置的,js非常适合这种模式.
我没有从事js开发,不太明白每个对象都有一个完整的函数对象,会出现什么优化问题,可以浅谈一下吗.

class Ant{
constructor(){
this.hp = 10;
this.atk = 1;
this.say = function(){ console.log("default"); }
}
}
Let ant1 = new Ant();
Let ant2 = new Ant();

ant2.say = function(){ console.log("hi boy"); }
ant1.say();
ant2.say();

无标题无名氏No.62413633

2024-05-16(四)23:05:16 ID: nnWCtvH

js的每个类都会在引擎内部抽象出一个抽象类来加快运行,具体的不很了解了

无标题无名氏No.62429560

2024-05-18(六)12:40:41 ID: mmnugQ3

代理模式