使用对象作为原型
Using an object as a prototype
有人能告诉我为什么这个代码不起作用吗?
PhoneNumber.prototype = Map;
var Map = {
writeToDOM : function(container) {
//DO STUFF HERE
}
};
PhoneNumber.writeToDOM(Container);
是否不可能参考对象的原型并使用所述对象的功能?我想这样做的原因是,我可以在多个对象上使用Map变量,而不必为每个对象重复writeToDOM代码,如下所示:
Object1.prototype.writeToDOM = function() {
//DO STUFF HERE
}
Object2.prototype.writeToDOM = function() {
//DO the exact same stuff as Object1
}
您的代码等效于以下内容:
var Map;
PhoneNumber.prototype = Map;
Map = {
writeToDOM : function(container) {
//DO STUFF HERE
}
};
PhoneNumber.writeToDOM(Container);
也就是说,您正在将PhoneNumber.prototype
分配给当前包含undefined
的Map
。然后将Map
重新指定为新值,但根本不更改PhoneNumber.prototype
。
如果在将原型分配给Map
之前,您只需将Map
分配给所需的对象,那么您就可以了:
var Map = {
writeToDOM : function(container) {
//DO STUFF HERE
}
};
PhoneNumber.prototype = Map;
PhoneNumber.writeToDOM(Container);
多亏了变量声明提升,代码运行时实际发生的事情是:
var Map; // = undefined;
PhoneNumber.prototype = Map;
Map = {
writeToDOM : function(container) {
//DO STUFF HERE
}
};
PhoneNumber.writeToDOM(Container);
无论你把var
语句放在哪里,JS都会把它们当作在该范围的顶部,但直到你这样做的那一行才赋值。因此,在你尝试使用Map
的时候,它仍然是未定义的。
将您的Map
分配上移到PhoneNumber.prototype = Map
之前。
您可以使用这样的东西:
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);
尝试以下代码:
function PhoneNumber (){}
PhoneNumber.prototype = Map;
var Map = {
writeToDOM : function() {
console.log("test");
}
};
var instance = new PhoneNumber();
instance.writeToDOM();
根据我的说法,这也可以在不使用原型的情况下完成。
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"));
修改为:
var映射;PhoneNumber.prototype=地图;
映射={writeToDOM:函数(容器){//在这里做事}};
PhoneNumber.writeToDOM(容器);
相关文章:
- Node.js中的JavaScript原型对象效率
- 获取原型对象的名称
- 如何维护对原型对象的访问
- 文字与原型对象表示法的数据结构
- 使用原型对象向javascript对象添加自定义属性和方法的建议
- 正在重置原型对象的构造函数属性
- 编写JS原型时,所有函数都应该使用原型对象
- 什么's是原型对象的真实名称
- Javascript - 使用数组作为函数的参数,并在创建新的原型对象时更改值
- 在原型对象 jquery 上将一个按钮与另一个按钮不同
- 原型对象
- 循环遍历数组时的原型对象
- 为什么初始化的 JavaScript 对象不包含原型对象
- JavaScript 原型对象 - 如何访问继承
- Javascript:获取此原型对象名称
- 如何在数据绑定后在 KNOCKOUT js 中使用“with”访问另一个原型对象
- 这在 JavaScript 中的原型对象中的值
- 在主干中向原型对象添加值不起作用
- 删除函数原型对象
- 为什么当我在这个JavaScript对象上使用反射时,我可以'看不到在其原型对象中定义的属性