使用new运算符作为参数调用函数

时间:2013-12-15 11:27:37

标签: javascript

众所周知,当我们将new运算符应用于函数

function foo(){ ... }

最初将创建一个空对象{}。进一步的函数foo()将被调用为刚刚创建的空对象的方法。因此this将获得对此空对象的引用。

现在考虑以下HTML

<div id="parent" class="parent">
    <div id="child" class="child">
        <input type="text" class="text"/>
        <input id="submit" value="submit" type="submit" onclick="doThis()"/>
    </div>
<div>

和相应的JS代码:

function doThis(){
    myKeys=[];
    var span= document.createElement("span");
    var parent=document.getElementById("parent");
    var child=document.getElementById("child");
    var submit=document.getElementById("submit");
    child.insertBefore(span,submit.nextSibling);
    span.innerHTML= getAllKeyValuePair(new test()); //Why this line returned {prop,property} rather then {0, H}, {1,e}, {2,l}, {3,l}, {4,o}
}

function getAllKeyValuePair(obj){
    var str="";
    for(var key in obj){
        try{
            str=str+"{"+key+", "+obj[key]+"}";
        }
        catch(e){
            console.log(key);
        }
    }

    return str;
}

function test(){
    this.prop="property";
    return "Hello";
}

JSFIDDLE 即可。我期望span将包含{0, H}, {1,e}, {2,l}, {3,l}, {4,o},因为在创建空对象test()之后,将作为此对象的方法调用并返回"Hello",但它不是真的。请解释一下它是如何工作的?

0 个答案:

没有答案