1

これはインタビューの質問です。Man次のコードを適切に実行できるようにクラスを作成するように求められました。

var me =new  Man();

//method one:
me.attr("fullname", "tom");

//method two:
me.fullname = "jim";

console.info("my name is:" + me.attr("fullname"));

/*------[result is]------
my name is:tom
------------------*/

私の答えは:

var Man=function(){
};

Man.prototype.attr=function(attr,val){
    if(val){
        this[attr]=val;
    }
    else{
        return this[attr];
    }
}

実行するコードの結果は次のとおりです。

/*------[result is]------
my name is:jim
------------------*/

誰が私を助けることができます?ありがとう

4

2 に答える 2

4

2 番目の辞書を作成できます。

function Man() {
    this.dictionary = {};
}

Man.prototype.attr = function(attr, val) {
    if(arguments.length > 1) {
        this.dictionary[attr] = val;
    } else {
        return this.dictionary[attr];
    }
};

閉じた変数を使用できます。

function Man() {
    var dictionary = {};

    this.attr = function(attr, val) {
        if(arguments.length > 1) {
            dictionary[attr] = val;
        } else {
            return dictionary[attr];
        }
    };
}

閉じたfullname変数を使用して、以下を除くすべてを無視できます'fullname'

function Man() {
    var fullname;

    this.attr = function(attr, val) {
        if(attr === 'fullname') {
            if(arguments.length > 1) {
                fullname = val;
            } else {
                return fullname;
            }
        }
    };
}

"tom"また、毎回戻るか、すべての属性が であるふりをする"fullname"か、またはその両方を行うこともできます。プロパティ名を割り当てる前に ROT13できます。アンダースコアを追加できます。で始まる値を破棄する代わりに、プロパティを作成"j"できます。実際、可能性は無限です。

于 2012-07-05T03:21:49.007 に答える
2

プロパティを使用して属性を保存します。

var Man=function(){
  this.attributes = {};
};

Man.prototype.attr=function(attr,val){
    if(val){
        this.attributes[attr] = val;
    }
    else{
        return this.attributes[attr];
    }
}
于 2012-07-05T03:24:09.307 に答える