我尝试使用以下命令在命名空间内分配原型(所有内容都包含在全局对象中):
prototypeObjects:{
Person : function(config){
var that = this;
this.name = config.name;
this.age = config.age;
console.log(that);
that.prototype.working = function(){
console.log(this.name + 'is working');
};
},
},
然后我在控制台中使用它来检查它:
var me = new global.prototypeObjects.Person({name:' Mike',age:' 40'});
给出了这个错误:
TypeError:无法设置属性' working'未定义的
但是,如果我明确指定原型,即:
prototypeObjects:{
Person : function(config){
var that = this;
this.name = config.name;
this.age = config.age;
console.log(that);
**global.prototypeObjects.Person**.prototype.working = function(){
console.log(this.name + 'is working');
};
}
},
然后它按预期工作,我得到以下内容:
global.prototypeObjects.Person {name:" Mike",age:" 40",working:function}
和me.working()退出'迈克正在工作'
有人可以解释为什么我不能使用这个'在这种情况下?
答案 0 :(得分:1)
您可以在构造函数体中定义原型函数,您应该在函数体外定义原型函数:
var global={};
global.pototypeObjects= {
Person : function(config){
this.name = config.name;
this.age = config.age;
}
};
global.pototypeObjects.Person.prototype.working=function(){
console.log(this.name + " is working");
};
var p = new global.pototypeObjects.Person(
{name:"jon",age:22}
);
p.working();//jon is working
以下是有关原型和设置继承的一些基本说明:Prototypical inheritance - writing up
最好不要在构造函数中使用var,因为它们会创建闭包,这些对象需要更多的cpu来初始化和更多的内存。
答案 1 :(得分:0)
因为您已经实例化了该对象。 prototype
存在于类中,而不是对象上。你可以这么做:
this.working = function() {}
否则,您应该将它移到构造函数之外。