1. 程式人生 > >javascrpt之this指向問題

javascrpt之this指向問題

window對象 嵌套 疑惑 call 保留 失去 col 它的 param

一:就近原則,this指向當前調用上下文; 也可以理解為局部變量覆蓋全局變量。 如:

 var foo = "foo";
   var myObject = {
       foo: ‘Hello World‘    
   };

   var sayHello = function(){
     console.log(this.foo);
   };

   myObject.sayHello = sayHello;   
   myObject.sayHello();        //   Hello World

   sayHello();                
// foo

二: 嵌套函數內部的this都失去方向,都指向了window對象

三:一個疑惑點,javascript中不是function也是對象嗎? 為什麽function裏的this不會指向自己呢? 

  this指向當前調用上下文!!!!!!!!!!!!   是誰調用它,讓它執行的就指向誰! 自動執行函數,它的this還是指向它的宿主的。

如何實現在嵌套層級中保證this的指向不變?

var myObject = {

      myProperty: "hello world",
      myMethod: function(){
          console.log(
this); // 調用這個方法它才會執行 var that = this; // 當前this指向 myObject 保留this的指向 var helperFunction = function(){ // 嵌套 此時this只想Window object console.log(this); console.log(that.myProperty); // hello world    that的指向指向myObject }() } }; myObject.myMethod();
// (function hello(){ // alert(this); // })();

四.call apply控制this的指向

var myObject = {};
  var myFunction = function(param1,param2){
      this.foo = param1;     // this指向它的調用上下文
      this.bar = param2;
      console.log(this);    // myObject
  };
  myFunction.call(myObject,‘foo‘,‘bar‘)    // 與其說call改變了this的指向,不如說this始終指向它的調用上下文而已 

  

javascrpt之this指向問題