2012-11-26 50 views
0

请帮我解决我的脚本的工作。对象在JS中返回其构造函数而不是false。为什么?

function KittyFactory(kitty) // kitty constructor 
{ 
    for (x in kitties) 
    { 
     if (kitties[x].color == kitty.color) 
     {return false;} // if already in the array return false 
    } 
    return kitty; // else return the object itself 
} 

function iPreferDifferentKitties(kitty) 
{ 
    if (new KittyFactory(kitty)) 
    { 
     kitties[x].push(kitty); 
    } 
} 

但如果(kitties[x].color == kitty.color)truenew KittyFactory(kitty)将是一个空的构造(本身的功能),而不是一个巨大的FALSE我想要什么。

我的问题是basicly我可以把我的小猫阵列中的两个小猫用相同的颜色。 :(让我伤心。

你能帮助我,我应该请如何使用它?

+0

你为什么要使用一个构造函数在这里吗?你想返回一个普通的功能东西 - 你没有任何构造对象 – pimvdb

+0

因为小猫会后与他们绞玩 –

+1

也许我错过了一些。东西,但'kitty'被传递给构造函数。所以构造函数不会构造任何东西,因为kitty对象已经可用。听起来你只是想删除'新'。 – pimvdb

回答

2

您不能从构造函数返回false。当你调用与new操作的函数,返回值必须是一个对象。如果你试图返回别的东西,它的行为就好像没有return陈述(和新构造的对象是默认的返回)。

+0

太好了。我会找到其他方法。 :)谢谢 –

+0

您可能会返回'{retval:false}',这将工作。或者返回一个空对象'{}'。 – bfavaretto

+0

咋,我做了同样的事情,也许一个聪明的人,他知道一种不同的方式。我想要解决方案,因为我不想把腿放在我的小猫身上,直到我知道它将以独特的颜色。 :D –

相关问题