javascript构造函数没有给出正确的结果

时间:2015-06-04 07:49:15

标签: javascript

我是js的新手。 我正在尝试使用构造函数来创建一个对象。 这是我的代码

    function player(name,age,rank)
{

    this.name=name;
    this.age=age;
    this.rank=rank;
    this.sayEverything=function()
    {

        return "The name of the player is " + this.name + "the age is " + this.age + "the rank is " + this.rank; 
    }

现在我正在添加一个像这样的新属性

player.matchReady=true;

现在我创建一个这样的对象

var kaka=new player("kaka",22,3,false);

当我写这个

document.write('kaka is match ready-->' + kaka.matchReady);

它给了我这个输出 kaka匹配就绪 - > undefined

为什么它给我未定义? 我没有正确添加新属性吗?请告诉我。 感谢。

4 个答案:

答案 0 :(得分:9)

而不是player.matchReady=true;

执行,player.prototype.matchReady = true;

这样所有玩家的匹配就绪默认值为true;

你也可能想把你的功能放到原型中。

player.prototype.sayEverything=function()
    {

        return "The name of the player is " + this.name + "the age is " + this.age + "the rank is " + this.rank; 
    }

您可以将原型视为脚手架,在该脚手架上概述了对象在实例化时应具有的所有属性和功能。所有这些默认值对于所有对象都是相同的。

在函数中添加函数时,实例化新对象时,所有这些函数都会在内存中重复。

如果可能且不需要范围界定,请尝试添加通用函数,例如sayEverything()(请将其重命名为toString()以符合约定)到原型。

这样所有玩家对象都可以使用相同的功能。哪个内存效率更高。

答案 1 :(得分:1)

您无法向类中添加属性。您始终可以将该属性添加为其原型。

像这样:

function player(name, age, rank) {

     this.name = name;
     this.age = age;
     this.rank = rank;
     this.sayEverything = function () {

         return "The name of the player is " + this.name + "the age is " + this.age + "the rank is " + this.rank;
     }
 }

 player.prototype.matchReady = true;
 var kaka = new player("kaka", 22, 3, false);

 alert('kaka is match ready-->' + kaka.matchReady);

工作示例:jsfiddle

Blog on prototype

答案 2 :(得分:1)

如果将其添加到原型中,则所有玩家都将拥有该字段。

player.prototype.matchReady = true;

如果您只想让特定玩家拥有该字段,请将其添加到该播放器变量:

var kaka = new player("kaka",22,3,false); 
kaka.matchReady = true;// kaka has to come first

答案 3 :(得分:1)

在下面的示例中,您可以看到什么是私有,公共,静态和特权变量或方法。当您在Method本身上编写属性(如静态变量)时,该变量将不可用于实例。

此外,无论何时编写构造函数,都应遵循命名约定以帮助您区分其他函数

/ Constructor
function Player(name) {
    // Private
    var dob= "17/04/1986";

    // Privileged
    this.getDOB = function () {
        return dob;
    };

    // Public
    this.name = name;
}

// Public
Player.prototype.getName = function () {
    return this.name;
};

// Static property
Player.town = "South Park";