使用Javascript意外输出

时间:2013-10-23 19:46:31

标签: javascript

以下是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”。

这是怎么回事?

3 个答案:

答案 0 :(得分:2)

当你这样做时

document.write(p1.showX());
你正在做什么

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

之后

document.write(undefined);

因为p1.showX()返回undefined

但正如Pointy指出的那样,you should not use document.write at all, especially after the document was loaded

答案 1 :(得分:1)

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

答案 2 :(得分:1)

替换

document.write(p1.showX());

p1.showX();

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