我正在尝试为我正在添加到网站的新功能运行A / B测试。在过去,我们的团队在显示页面上的各种功能之前已做过类似的事情:
someUserActionThatEnablesFeature:function(){
experiments.isUserInControlGroup('new-feature1') && newFeature1Obj.show();
}
someUserActionThatDisablesFeature:function(){
experiments.isUserInControlGroup('new-feature1') && newFeature1Obj.hide();
}
我发现这是非常好的,因为我们必须检查是否在我们使用新功能的每个地方都启用了实验。我正在考虑做的事情是这样的:
function NewFeature1(){
//constructor
}
NewFeature1.prototype = {
show:function(){
//do something
},
hide:function(){
//do something
},
//etc
};
//before any objects are declared
if (experiments.isUserInControlGroup('new-feature1')) {
for(var prop in NewFeature1.prototype) {
//replace with empty function
NewFeature1.prototype[prop] = function(){};
}
}
这里的想法是我在实例化之前用空存根替换NewFeature1类的方法,从而确保如果用户不在控件组中,我对该对象的任何调用都不会执行任何操作。
在某些浏览器中这是危险的吗?我在初始测试中无法判断是否覆盖了Object的属性。在webkit中,它似乎并没有伤害任何东西。我错过了什么吗?我只需要担心webkit,FF和IE8 +。 谢谢!
答案 0 :(得分:1)
我认为如果该类没有继承,那么仅存在由hasOwnProperty
确定的直接属性可能更好。