为什么Javascript构造函数不';不归

为什么Javascript构造函数不';不归,javascript,html,oop,prototype,Javascript,Html,Oop,Prototype,我有个问题。 当我从一个对象创建实例时,它不会返回构造函数的值。 ................................................................................................................................................................ 徖 //主分支 变量=函数(){ 功能生物(名称,活体){ this.name=名称; 这是活着的; } 函数

我有个问题。 当我从一个对象创建实例时,它不会返回构造函数的值。 ................................................................................................................................................................ 徖

//主分支
变量=函数(){
功能生物(名称,活体){
this.name=名称;
这是活着的;
}
函数创建者(名称、活动、睡眠){
this.name=名称;
这是活着的;
这个。睡眠=睡眠;
}
};
var Beast=函数(){
函数呼吸(){
返回true;
}
这是新的生物;
};
var=函数(){
this.numberOfBeads=“我是哺乳动物的numberOfBeads”;
这是新的野兽;
};
//哺乳动物科
var=function(){
功能思维(){
返回true;
}
this.love=“我是来自人类的爱”;
这是新的哺乳动物;
};
变量=功能(){
this.institute=“我是动物中的动物”;
这是新的哺乳动物;
};
变量=函数(){
this.color=“我是来自植物的颜色”;
函数增长(){
返回true;
}
这是新的生物;
};
变量树=函数(){
this.height=“我离树很高”;
这是新的植物;
};
变量=函数(){
this.嗅觉=“我是花的气味”;
这是新的植物;
};
var Grasses=函数(){
this.color=“我是来自草的颜色”;
这是新的植物;
};
var obj2=新生物(“阿里”,真);
警报(obj2.name)

指数

我可以证实,正如@Denys Seguret所说,某些事情似乎相当模糊

无论如何,由于函数构造函数返回的对象具有附加在该函数构造函数中的属性,因此您会得到未定义

在您的情况下,您的功能是:

var Creatures = function () {
    function Creatures(name,alive) {
        this.name = name;
        this.alive = alive;
    }
    function Creatures(name,alive,sleep) {
        this.name = name;
        this.alive = alive;
        this.sleep = sleep;
    }
};
这是一个函数表达式,它的作用域中有两个同名函数(第二个将覆盖第一个,尽管第一个没有用)

正如您所看到的,您没有为将从对象隐式返回的对象设置任何类型的属性

我用第二个函数声明替换您的示例:

功能生物(名称、活动、睡眠){
this.name=名称;
这是活着的;
这个。睡眠=睡眠;
}
var obj2=新生物(“阿里”,真);

警报(obj2.name)我可以证实,正如@Denys Seguret所说,某些事情似乎相当模糊

无论如何,由于函数构造函数返回的对象具有附加在该函数构造函数中的属性,因此您会得到未定义

在您的情况下,您的功能是:

var Creatures = function () {
    function Creatures(name,alive) {
        this.name = name;
        this.alive = alive;
    }
    function Creatures(name,alive,sleep) {
        this.name = name;
        this.alive = alive;
        this.sleep = sleep;
    }
};
这是一个函数表达式,它的作用域中有两个同名函数(第二个将覆盖第一个,尽管第一个没有用)

正如您所看到的,您没有为将从对象隐式返回的对象设置任何类型的属性

我用第二个函数声明替换您的示例:

功能生物(名称、活动、睡眠){
this.name=名称;
这是活着的;
这个。睡眠=睡眠;
}
var obj2=新生物(“阿里”,真);

警报(obj2.name)函数中没有任何返回语句

var Creatures = function () {
    function Creatures(name,alive) {
        this.name = name;
        this.alive = alive;
    }
    function Creatuers(name,alive,sleep) {
        this.name = name;
        this.alive = alive;
        this.sleep = sleep;
    }
};
您可能试图做的是委托对象的实例化,根据参数(可能还有一些业务逻辑)选择合适的构造函数。注意javascript中没有方法重载,因此需要对内部函数使用不同的命名

var=function(…参数){
函数创建者1(名称,活动){
this.name=名称;
这是活着的;
}
函数创建者2(名称、活动、睡眠){
this.name=名称;
这是活着的;
这个。睡眠=睡眠;
}
返回params.length==2?新建Creatures1(…params):新建Creatures2(…params);
};
var obj2=生物(“ali”,真);

警报(obj2.name)函数中没有任何返回语句

var Creatures = function () {
    function Creatures(name,alive) {
        this.name = name;
        this.alive = alive;
    }
    function Creatuers(name,alive,sleep) {
        this.name = name;
        this.alive = alive;
        this.sleep = sleep;
    }
};
您可能试图做的是委托对象的实例化,根据参数(可能还有一些业务逻辑)选择合适的构造函数。注意javascript中没有方法重载,因此需要对内部函数使用不同的命名

var=function(…参数){
函数创建者1(名称,活动){
this.name=名称;
这是活着的;
}
函数创建者2(名称、活动、睡眠){
this.name=名称;
这是活着的;
这个。睡眠=睡眠;
}
返回params.length==2?新建Creatures1(…params):新建Creatures2(…params);
};
var obj2=生物(“ali”,真);
警报(obj2.name)如果您指的是
var obj2=新生物(“ali”,真)不返回一个实例!它不会返回属性为
name
alive
的新生物实例,因为这些不是构造函数的参数,也不是构造函数(顶级)中设置的属性:

看起来你要做的是创建重载构造函数?! javascript中不支持函数重载

如果您指的是
var obj2=新生物(“ali”,真)不返回一个实例!它不会返回属性为
name
alive
的新生物实例,因为这些不是构造函数的参数,也不是构造函数(顶级)中设置的属性:

看起来你要做的是创建重载构造函数?! 傅