这有什么不同......
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;
}
谢谢!
David,我有一段代码用于我正在构建的游戏,看起来像这样......
function Player(node){
this.node = node;
this.grace = false;
this.replay = 3;
this.shield = 3;
this.respawnTime = -1;
...
return true;
}
并且它不会返回引用错误。它是我正在构建的javascript游戏中的玩家的对象......
答案 0 :(得分:2)
第一个依赖于通过参数设置的局部变量来设置其实例变量/属性,第三个依赖于全局变量来设置其属性,第二个是混合。
答案 1 :(得分: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
答案 2 :(得分:0)
第一个有效,您使用构造函数中发送的参数初始化您的局部变量。其余的都没有意义。
在第二个中,您可以将参数与其他一些可以在此时访问的变量混合,只使用参数启动名称。
并且第3个基于可访问的变量,但它们都没有作为参数给出,我从来没有看到使用第2和第3选项有用的东西..