Statics 和 StaticsWhiteList 的问题
bubkoo opened this issue · comments
崖 commented
我在使用如下这段代码时,发现设置 StaticsWhiteList
并不像预想的那样,简单地说就是 StaticsWhiteList
并没有起作用,请看下面是示例:
var Pig = Class.create({
initialize: function (name) {
this.name = name;
},
talk: function () {
alert('我是' + this.name);
},
Statics: {
AGE: 3,
FROM: 'China'
},
StaticsWhiteList: 'FROM'
});
var pig = new Pig('猪');
console.log('Pig.AGE = '+Pig.AGE);
console.log('Pig.FROM = '+Pig.FROM);
var RedPig = Pig.extend({
initialize: function (name) {
RedPig.superclass.initialize.call(this, name);
},
color: '红色'
});
var redPig = new RedPig('猪');
console.log('RedPig.AGE = '+RedPig.AGE);
console.log('RedPig.FROM = '+RedPig.FROM);
执行输出结果:
Pig.AGE = 3
Pig.FROM = China
RedPig.AGE = 3
RedPig.FROM = China
结果是拷贝了父类中所有的静态属性。
问题在于在继承的时候,源代码中并没有将 'StaticsWhiteList' 保存到父类的静态属性中,我在 'Mutators' 中加对 'StaticsWhiteList' 处理的代码:
'StaticsWhiteList': function (val) {
this['StaticsWhiteList'] = val;
}
修改之后,结果和预期的一样。。。
还有一个问题想讨论:
一旦没有设置 StaticsWhiteList
,父类中的所有静态属性或方法将被拷贝到子类中,这个符合我们的通常思维,但是设置 StaticsWhiteList
之后就只会拷贝 StaticsWhiteList
所指定的属性,感觉这样有点不合理;个人认为可以将 StaticsWhiteList
修改为 StaticsBlackList
,这样 StaticsBlackList
之外的静态属性或方法都拷贝到子类中,StaticsBlackList
所指定的属性就相当于成为了封闭属性,和封闭类有异曲同工之处。
如果理解有误请拍砖。
VaSeala commented
+1
闲耘™ commented
2015年了,可以用 es6 的 class 了,谁还用这个。。