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}
這可能就是一個今後相逢是路人的故事...對象