如题目是这样的,实现一个类让下面的代码可以正常运行:
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();
/*------[执行结果]------
我的名字是:小李
我的性别是:<用户未输入>
她的名字是:小红
她的性别是:女 */
我写了下面的代码,在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贡献2037条经验 获得超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") 这段应该是 she.attr("gender")
沧海一幻觉
TA贡献1824条经验 获得超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 "<用户未输入>"; } } }
添加回答
举报
0/150
提交
取消