標籤:style blog http io ar color sp java strong
情形一:傳入的參數是函數的別名,那麼函數的this就是指向window;
情形二:傳入的參數是被new過的建構函式,那麼this就是指向執行個體化的對象本身;
情形三:如果我們想把被傳入的函數對象裡this的指標指向外部字面量定義的對象,那麼我們就是用apply和call
我們可以通過代碼看出我的結論,代碼如下:
<script type="text/javascript">var name = "I am window";var obj = { name:"sharpxiajun", job:"Software", ftn01:function(obj){ obj.show(); }, ftn02:function(ftn){ ftn(); }, ftn03:function(ftn){ ftn.call(this);//Call和apply是將this指標指向方法的第一個參數 }};function Person(name){ this.name = name; this.show = function(){ console.log("姓名:" + this.name); console.log(this); }}var p = new Person("Person");obj.ftn01(p);obj.ftn02(function(){ console.log(this.name); console.log(this);});obj.ftn03(function(){ console.log(this.name); console.log(this);});</script>
結果如下:
最後再總結一下:
如果在javascript語言裡沒有通過new(包括對象字面量定義)、call和apply改變函數的this指標,函數的this指標都是指向window的。
【轉】JavaScript裡的this指標