第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

javascript中如何讓一個類既可以用new實例化,也可以不用new進(jìn)行實例化?

javascript中如何讓一個類既可以用new實例化,也可以不用new進(jìn)行實例化?

慕運維8079593 2018-12-07 10:14:52
如題目是這樣的,實現(xiàn)一個類讓下面的代碼可以正常運行: var me = Man({ fullname: "小李" }); var she = new Man({ fullname: "小紅" ,gender:"女"}); console.group(); console.info("我的名字是:" + me.attr("fullname") + "\n我的性別是:" + me.attr("gender")); console.info("她的名字是:" + she.attr("fullname") + "\n她的性別是:" + she.attr("gender")); console.groupEnd(); /*------[執(zhí)行結(jié)果]------ 我的名字是:小李 我的性別是:<用戶未輸入> 她的名字是:小紅 她的性別是:女 */ 我寫了下面的代碼,在new的情況下可以正常運行,但如何讓這個類也支持不用new的情況? Man=function(obj){ for(var e in obj){ this[e]=obj[e]; } } Man.prototype.attr=function(attr,val){ if(val){ this[attr]=val; } else{ if(this[attr]){ return this[attr]; } else{ return "<用戶未輸入>"; } } }
查看完整描述

2 回答

?
阿晨1998

TA貢獻(xiàn)2037條經(jīng)驗 獲得超6個贊

function Man(o) {
function A() {}
A.prototype.attr = function(str) {
return str in this ? this[str] : "<用戶未輸入>";
}
var obj = new A;
for (var e in o) {
obj[e] = o[e];
}
return obj;
}

另外上面的例子錯了,?她的性別是:" + me.attr("gender")?這段應(yīng)該是 she.attr("gender")

查看完整回答
反對 回復(fù) 2018-12-24
?
滄海一幻覺

TA貢獻(xiàn)1824條經(jīng)驗 獲得超5個贊

這樣寫就可以了:

Man=function(obj){
    if(this instanceof arguments.callee){
        for(var e in obj){
            this[e]=obj[e];
        }
    }
    else{
        return new Man(obj);
    }
}
Man.prototype.attr=function(attr,val){
    if(val){
        this[attr]=val;
    }
    else{
        if(this[attr]){
            return this[attr];
        }
        else{
            return "<用戶未輸入>";
        }
    }
}
查看完整回答
反對 回復(fù) 2018-12-24
  • 2 回答
  • 0 關(guān)注
  • 1291 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號