为什么此代码在Firebug中显示错误?
var Xjs =function(name){
if(!(this instanceof Xjs)) return new Xjs(name)
};
Xjs.prototype={
constructor:Xjs,
Xjs:function(){this.name=name;},
getName:function(){
alert(this.name);
}
}
在Firebug中:
Xjs('hi').getName();
答案 0 :(得分:1)
var Xjs =function(name){
if(!(this instanceof Xjs)) return new Xjs(name)
this.name = name;
};
Xjs.prototype={
constructor:Xjs,
getName:function(){
alert(this.name);
}
}
Xjs('hi').getName();
您不需要传递原型中的方法name
将其视为对象。 name
已作为this.name
提供给该对象的所有成员
答案 1 :(得分:0)
对象字段必须是对象本身的成员而不是它的原型试试这个:
var Xjs =function(name){
if(!(this instanceof Xjs)) return new Xjs(name);
this.name = name;
};
Xjs.prototype={
constructor:Xjs,
getName:function(){
alert(this.name);
}
}
答案 2 :(得分:0)
Itay的解决方案是正确的。
解释一下:说出你的行
有点难 Xjs:function(){this.name=name;},
应该是完成的,特别是因为那时没有定义变量name
。
但是,如果我不得不猜测,我会说这似乎是一种印象,即向Xjs
添加Xjs.prototype
函数将充当构造函数(不知何故),并且可能神奇地接通了到接受Xjs
参数的原始name
函数。
不用说,这是假的。将Xjs : function () { this.name = name; }
添加到Xjs.prototype
意味着,您可以执行以下操作:
var instance = new Xjs("hi");
instance.Xjs();
换句话说,它为Xjs
实例添加了另一种方法,就像getName
一样,尽管该方法恰好被称为Xjs
。
(当然,该代码会立即抛出ReferenceError
,因为如上所述,name
未定义。但这是一个单独的问题。)