众所周知,当我们将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"
,但它不是真的。请解释一下它是如何工作的?