js指向問題

1.this的指向:
json和原型鏈是同樣的。
看了不少文章都說的比較複雜。
this指向調用對象。
直接貼代碼吧。程序員

var x = {
         test:function(){
                          console.log(this);
                        };
              };
x.test()//x{...};
var n = x.test();
n();//Window

第一次是x調用,因此console.log的是x,第二次至關因而window.n(),也就是window調用,因此顯示的是window。
可能我理解得比較淺,我以爲this就是包含‘this’得那個函數的'.'前面的對象。至於apply和call會有些變化,我下面粗略說下。
apply和call的區別就在於,apply是(對象,[參數集合]),call是(對象,參數,參數,參數,參數,參數...),其餘的我暫時還不清楚。先貼個代碼。json

function ed(){
    this.age = ed;
    }; 
    function ing(){
    this.age = 2;
    this.sex = 0;
    this.showAge = function(){
        console.log(this.age);
        console.log(this.sex);
        }
    };
    var edObj = new ed();
    var ingObj = new ing();
    ingObj.showAge.apply(edObj);//2,Undefined

這說白了,就比如一個程序員換了臺電腦進行開發,除了處理數據的邏輯在本身的腦子裏,其餘的環境變量都得用人家的。apply前面的方法是這個程序員的思惟,()裏面的方法就是新電腦。至於後面的參數...就是方法所須要的參數,這個能夠本身隨便傳。app

2.箭頭函數指向: 箭頭函數名字都沒有一個,根本無法被喊着名字去調用,因此this永久指向Window.函數

3.變量指向:這個我以爲涉及到內存指針的問題。可是很好理解,就是常量佔內存,變量往上湊。比如2+個小孩玩遊戲同樣,只要你別換地也別去和其餘人玩,你的就是個人,個人也是你的。這個內存就比如小孩遊戲的場地,小孩擁有的玩具就是他們的屬性(這些小孩都比較大方)。
先舉個三個例子:this

var xArr = [];
var xJson = {};
(()=>{
      let yArr = xArr,
         yJson = xJson;
       yArr.push(1);
       yJson.age = 1;
      })();//這裏說明即使是塊級變量也是能夠一塊兒參與玩耍的,屋裏玩耍的孩子玩具同樣能夠被其餘小孩在屋外展現。
console.log(xArr);//[1]; 
console.log(xJson);//{age: 1}

由於Y一直沒有去找其餘人玩(怎麼找別人玩看例子3),因此y的玩具就是x的玩具。指針

var x = 0,
    a = 2.
    b = 3,
    y = x;
    console.log(y);//0
    y = a+b;
    console.log(x);//0
    console.log(y);//5

由於Y換了個地方玩(本身開了一個內存去指向),因此x拿不到Y的玩具。code

var x = {},
    a = {},
    y = x,
    z = y,
    y = a;
    y.age = 1;
    console.log(x);//{}
    console.log(y);//{age:1}
    console.log(z);//{}
    console.log(a);//{age:1}
    z.age = 2;
    console.log(x);//{age:2}

這可能就是一個今後相逢是路人的故事...對象

相關文章
相關標籤/搜索