有谁能告诉我为什么这段代码不起作用?
PhoneNumber.prototype = Map;
var Map = {
writeToDOM : function(container) {
//DO STUFF HERE
}
};
PhoneNumber.writeToDOM(Container);
是否无法根据对象的protype引用对象并使用所述对象的函数?我想要这样做的原因是我可以在多个对象上使用Map变量,而不是像这样重复每个对象的writeToDOM代码:
Object1.prototype.writeToDOM = function() {
//DO STUFF HERE
}
Object2.prototype.writeToDOM = function() {
//DO the exact same stuff as Object1
}
答案 0 :(得分:1)
您的代码等同于以下内容:
var Map;
PhoneNumber.prototype = Map;
Map = {
writeToDOM : function(container) {
//DO STUFF HERE
}
};
PhoneNumber.writeToDOM(Container);
也就是说,您要将PhoneNumber.prototype
分配给Map
,目前包含undefined
。然后,您将Map
重新分配给新值,但根本不更改PhoneNumber.prototype
。
如果您在将原型分配给Map
之前简单地将Map
分配给所需对象,那么您就可以了:
var Map = {
writeToDOM : function(container) {
//DO STUFF HERE
}
};
PhoneNumber.prototype = Map;
PhoneNumber.writeToDOM(Container);
答案 1 :(得分:1)
感谢变量声明提升,代码运行时实际发生的是:
var Map; // = undefined;
PhoneNumber.prototype = Map;
Map = {
writeToDOM : function(container) {
//DO STUFF HERE
}
};
PhoneNumber.writeToDOM(Container);
无论你在哪里放置var
语句,JS都将它们视为处于该范围的顶部,但不会将值分配到行所在的位置你这样做了因此,在您尝试使用Map
时,它仍未定义。
将Map
作业移至PhoneNumber.prototype = Map
之前。
答案 2 :(得分:0)
您可以使用以下内容:
var Map = {
writeToDOM: function() {
// stuff
}
}
var extend = function(obj, proto) {
for(var k in proto) {
obj.prototype[k] = proto[k];
}
}
extend(Object1, Map);
extend(Object2, Map);
答案 3 :(得分:0)
请尝试以下代码:
function PhoneNumber (){}
PhoneNumber.prototype = Map;
var Map = {
writeToDOM : function() {
console.log("test");
}
};
var instance = new PhoneNumber();
instance.writeToDOM();
答案 4 :(得分:0)
按照我的说法,也可以在不使用原型的情况下完成。
var Map = {
writeToDOM : function(container) {
console.log("written to "+container); //container is string
}
};
function PhoneNumber(name,no){
var map=Map;
this.name="user";
this.no=100;
return{
toString:function(){
return this.name+"-"+this.no;
},
writeToDOM:map.writeToDOM
}
}
var phone1=new PhoneNumber("cham",100002);
console.log(phone1.writeToDOM("body"));
答案 5 :(得分:-2)
修改为:
var map; PhoneNumber.prototype = Map;
Map = { writeToDOM:function(container){ //别在这里 }};
PhoneNumber.writeToDOM(容器);