我对js构造函数有疑问。我有以下代码:
var PersonConstructorFunction = function (firstName, lastname, gender) {
this.personFirstName = firstName;
this.personLastName = lastname;
this.personGender = gender;
this.personFullName = function () {
return this.personFirstName + " " + this.personLastName;
};
this.personGreeting = function (person) {
if (this.personGender == "male") {
return "Hello Mr." + this.personFullName();
}
else if (this.personGender == "female") {
return "Hello Mrs." + this.personFullName();
}
else {
return "Hello There!";
}
};
};
var p = new PersonConstructorFunction("Donald", "Duck", "male");
p2 = new PersonConstructorFunction("Lola", "Bunney", "female");
document.write(p2.personGreeting(p2) + " ");
结果非常明显 - - 你好,Lola Bunney夫人 -
问题是: 有两个等价对象p和p2具有相同数量的属性和方法。当我调用一个对象的personGreeting方法并将第二个对象作为参数传递时,我无法理解以下行为:
**document.write(p2.personGreeting(p) + " ");**
在这种情况下,我得到了 - Lola Bunney的Hello夫人 - 但是作为参数传递的p对象呢?
personGreeting获取人物对象,确定其性别并在结果上显示适当的问候语。
我最近学会了C#和构造函数,我猜它的工作方式相似。
答案 0 :(得分:2)
您没有对传递的参数执行任何操作。由于您正在使用this
,因此只会调用构造函数中的变量。
您 COULD 执行person.personFullName();
这意味着将调用参数成员personFullName()
,而不是您的构造函数。