1

Web サイトに追加する新機能の 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 クラスのメソッドを空のスタブに置き換えることです。これにより、ユーザーがコントロール グループに属していない場合、オブジェクトに対する呼び出しが何も行われないようにします。

これは一部のブラウザでは危険ですか? オブジェクトのプロパティを上書きしているかどうかは、最初のテストではわかりませんでした。Webkit では、それが何かを傷つけているようには見えませんでした。何か不足していますか?Webkit、FF、および IE8+ についてのみ心配する必要があります。ありがとう!

4

1 に答える 1

1

hasOwnPropertyクラスに継承がないかどうかによって決定される直接のプロパティのみをスタブする方がよいかもしれません。

于 2013-12-07T03:28:59.043 に答える