<script> function

enjoyoschina 发布于 2016/10/23 20:16
阅读 184
收藏 0
<script>
function show()

{                     

                            //-------------结果----------------

                            //show()        new show()

    alert(this);              //window             object
    alert(typeof this);    //object               object
}

show();          
new show();     

</script>


谁能解释一下这种情况


加载中
2
风一样的女子
风一样的女子
以 new 操作符调用构造函数的时候,函数内部发生以下变化:
  1、创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。
  2、属性和方法被加入到 this 引用的对象中。
  3、新创建的对象由 this 所引用,并且最后隐式的返回 this 。

不用new的时候,this指向window对象

使用show();的时候,this 指向window对象,
window对象的toString 返回"[object Window]",所以alert(this);显示"[object Window]"
typeof获取对象的类型,类型是object.所以 alert(typeof this); 显示object.

new show();的时候创建了一个空对象,对象默认的toString返回object,所以alert(this);显示"object"

你如果加一句:

show.prototype.toString = function(){return "[object show]";}

再使用new show(),第一alert会显示"[object show]"

搜索关键字:js new

e
enjoyoschina
回复 @风一样的女子 : <script> function show() { 同上 show(); new show(); //下面是添加内容 alert("分隔"); new show().alert(this); //与new show()的alert区别在? </script>
e
enjoyoschina
回复 @风一样的女子 : 谢谢
风一样的女子
风一样的女子
回复 @enjoyoschina : new show().alert(this)?能否说清楚点,全都挤在一行不太好理解。show() 和 new show() 调用的是同一段代码,但是他们的this对象不同,所以会显示不同的内容,alert(this)显示this.toString()返回的内容,他们的toString返回不同,所以显示的东西不同。
e
enjoyoschina
new show(); 用的alert 与 new show().alert(this) 用的是同一个alert吗
0
szwx855
szwx855
学习了
0
风一样的女子
风一样的女子

引用来自“风一样的女子”的评论

以 new 操作符调用构造函数的时候,函数内部发生以下变化:
  1、创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。
  2、属性和方法被加入到 this 引用的对象中。
  3、新创建的对象由 this 所引用,并且最后隐式的返回 this 。

不用new的时候,this指向window对象

使用show();的时候,this 指向window对象,
window对象的toString 返回"[object Window]",所以alert(this);显示"[object Window]"
typeof获取对象的类型,类型是object.所以 alert(typeof this); 显示object.

new show();的时候创建了一个空对象,对象默认的toString返回object,所以alert(this);显示"object"

你如果加一句:

show.prototype.toString = function(){return "[object show]";}

再使用new show(),第一alert会显示"[object show]"

搜索关键字:js new

回复 @enjoyoschina

alert无论在哪里调用都是显示参数的内容。参数不同显示的东西就不同。
alert(this) 显示不同内容是因为this不同,
就和a=123;alert(a)显示123,
a=456;alert(a)显示456一样的,
虽然同样是alert(a);但a的内容不一样。
你的"new show().alert(this);"是一行还是两行?
一行的话new show返回了一个空的对象,他没有alert方法。

直接调用 show()的时候,this还是window.
相当于:
{
this = window;
show();
}

new show()的时候,相当于设置this为一个空的对象再调用show.
相当于:
{
this = {};
show();
}

评论不换行看起来真费力。

e
enjoyoschina
200字确实太少了...
返回顶部
顶部