版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Blog2015/article/details/77010567
lua 中没有类,
lua middleclass 实现了类。
github地址: https://github.com/kikito/middleclass
今天写代码的时候遇见一个问题,纠结了一下午。
最后发现 用middleclass,实例化多个对象时,好像后面的对象会覆盖前面对象的 其基类中的属性。
做了个测试如下:
类A,(类B的基类):
类B, (类A的子类):
扫描二维码关注公众号,回复:
2908643 查看本文章
测试代码:
测试结果:
结果有问题, b1.property.aaa 已经被篡改成和 b2的相同了。
结论: middleclass 的对象属性不能为表。否则在实例化时各子类对象,将会共用这个属性,先实例化的这部分属性会被后实例化的覆盖。
可以将类A(B的基类)这样改一下:
测试代码不变。
结果:
结果正确,各对象的属性不同。
今天想明白了,这个共用、覆盖的特性正好用来作为静态属性。
这样声明的变量:
A.static.xxx = nil
实际会自动先创建一个 A.static = {}