0

这有什么区别...

function Person(name, age, sex) {
  this.name = name;
  this.age = age;
  this.sex = sex;
}

和这个...

function Person(name) {
  this.name = name;
  this.age = age;
  this.sex = sex;
}

和这个...

function Person() {
  this.name = name;
  this.age = age;
  this.sex = sex;
}

谢谢!


大卫,我有一段我正在构建的游戏的代码,看起来像这样......

function Player(node){
    this.node = node;
    this.grace = false;
    this.replay = 3; 
    this.shield = 3;
    this.respawnTime = -1;
  ...
return true;
}

并且它不会返回参考错误。它是我正在构建的 javascript 游戏中玩家的对象...

4

3 回答 3

2

正如 Brett 所说,第二个和第三个构造函数会将任何全局变量分配给新 Person 实例的属性。但是,您仍然可以使用可能传递给构造函数的任何参数:

function Person()//no args
{
    //depending on which value is available:
    //prop = n-th argument OR global variable OR undefined
    this.name = arguments[0] || window.name || undefined;
    this.age = arguments[1] || window.age || undefined;
    this.sex = arguments[2] || window.sex || undefined;
}
var parrot = new Person('polly',1,'M');
console.log(parrot.name);//polly
var noSex = new Person('Joe',99);//if no global sex is set:
console.log(noSex.sex);//undefined
var sex = 'F';
var jane = new Person('Jane',25);
console.log(jane.sex);//F
于 2012-09-18T14:23:19.227 回答
2

第一个依靠通过参数设置的局部变量来设置它的实例变量/属性,第三个依靠全局变量来设置它的属性,第二个是混合的。

于 2012-09-18T14:04:37.983 回答
0

第一个是有效的,你用构造函数中发送的参数初始化你的局部变量。其余的并没有真正的意义。

在第二个中,您将参数与您可以访问的其他一些变量混合在一起,您只使用参数启动名称。

第三个是基于可访问变量,但没有一个是作为参数给出的,我从来没有看到使用第二个和第三个选项有用的东西..

于 2012-09-18T14:04:35.727 回答