Javascript构造函数行为

时间:2014-04-21 18:22:11

标签: javascript constructor

我对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#和构造函数,我猜它的工作方式相似。

1 个答案:

答案 0 :(得分:2)

您没有对传递的参数执行任何操作。由于您正在使用this,因此只会调用构造函数中的变量。

COULD 执行person.personFullName();这意味着将调用参数成员personFullName(),而不是您的构造函数。