Javascript中的new

直接上代码

function test () {

 }
 document.write(typeof test() + "<br />")
 document.write(typeof new test() + "<br />")

输出结果

undefined

object

undefined好理解,因为test函数没有返回值。

那new的时候为什么会返回object呢?其实当我们new一个方法的时候,可以理解为js帮我们做了某些操作,代码如下,注释的部分就相当于js帮我做的

function test () {
      //var this = new Object();
      //my code...
      //return this;
}

每次使用new,意为创建一个新的空白对象

alert(test() === test())          //true
alert(new test() === new test())          //false

当然,在没有new就调用test方法的时候,并不表明其中就不能使用this,这时候的this,指向window,为了进一步证实这一点,代码如下:

window.name = "jack"
function fn () {
    this.name = "rose";
}
fn();
document.write(window.name)          //rose

捎带手的说下window,当我们在大环境下声明一个变量(全局变量),无论是否有var,其实是给window对象加了一个属性。

如果我们在其他函数内声明变量的时候不适用var,很可能就在无意间将其他的全局变量更改掉,下面的代码是个再常见不过的代码,说明了使用var的必要性。

var name = "window";
(function test(){
    var name = "test";
    document.write(name + "<br/>");   //test   
})();
document.write(name + "<br/>"); //window

 

posted @ 2014-05-14 23:07  李清昌  阅读(267)  评论(0编辑  收藏  举报