0

这是位于 http://jsfiddle.net/QWXf4/1/的 JavaScript 代码片段

var x = 5;

function PartyWithoutX(person) {
    // This property will go to window and pollute the global object
    dance = function (person) {
        document.write("Hello " + person.getFullName() + ", Welcome to the Party.");
    };

    this.showX = function () {
        // This will change the global x variable
        x = 25;
        document.write("Value of x is " + x);
    };
}

function Person(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
}

Person.prototype.getFullName = function () {
    return this.firstName + " " + this.lastName;
};

var dinesh = new Person("Dinesh", "Singh");

var p1 = new PartyWithoutX(dinesh);

document.write(window.dance(dinesh) + "; Enjoy!!");
document.write("<br/>");
document.write(p1.showX());
document.write("<br/>");
document.write(window.x);
document.write("<br/>");

您可以检查的输出是

Hello Dinesh Singh, Welcome to the Party.undefined; Enjoy!!
Value of x is 25undefined
undefined

我期待

Hello Dinesh Singh, Welcome to the Party; Enjoy!!
Value of x is 25
undefined

为什么我在输出中得到“Party.undefined”和“25undefined”。

这里发生了什么?

4

3 回答 3

2

当你这样做

document.write(p1.showX());

你正在做的

document.write("Value of x is " + x);

然后做

document.write(undefined);

因为p1.showX()返回undefined

但正如 Pointy 指出的那样,您根本不应该使用document.write,尤其是在加载文档之后

于 2013-10-23T19:52:45.870 回答
1

您将这些函数调用的结果传递给document.write(). 他们不返回任何东西,所以你得到那些“未定义”的结果。

于 2013-10-23T19:52:53.903 回答
1

代替

document.write(p1.showX());

p1.showX();

因为第一个打印未定义的 pi1.showX() 的结果。

于 2013-10-23T19:53:57.280 回答