我是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
为什么它给我未定义? 我没有正确添加新属性吗?请告诉我。 感谢。
答案 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
答案 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";