TypeError:Xjs(“hi”)。getName不是firebug控制台中显示的函数

时间:2011-07-02 06:24:32

标签: javascript

为什么此代码在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();

3 个答案:

答案 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未定义。但这是一个单独的问题。)