今天發現了this的一個奇妙作用,那就是在call中和apply中指代的都是全局。見下代碼:
var money= "想要擁有一個億" var obj1={ money:"我擁有一個億", foo:function() { console.log(this.money); } } var obj2={ money:"同桌擁有一個億" }
obj1.foo(); //我擁有一個億
obj1.foo.call(this) //你猜是什么?? 刮開圖層查看答案
obj1.foo.call(obj2) //同桌擁有一個億
obj1.foo() 指向obj1下的foo,因此直接打印“我擁有一個億”。
call函數修改函數內部this值指向
obj1.foo.call(this) 由於有了call,因此指向全局,將打印“想要擁有一個億”
obj1.foo.call(obj2) ,由於有了call,因此指向obj2,將打印“同桌擁有一個億”
this
this的指向跟函數調用有關
如果函數使用"()"來調用,那看一下括號前面是不是函數名,如果是,看函數名前面有沒有對象
有,this指向該對象
沒有,
Nodejs環境中 this --> global對象
瀏覽器環境中 this --> window對象
nodejs中的this和在瀏覽器中javascript中的this是不一樣的