this:上 下文,根據執行環境而發生指向的改變,只有函式執行的時候才能確定this到底指向誰。實際上this的最終指向的是那個呼叫它的物件。
例子1:在嚴格版中的預設的this不再是window,而是undefined。我們這裡不討論嚴格版的。
//在直接呼叫函式中獲取this
function a()
a();//undefined window
window.a();//undefined window
//函式作為物件的乙個屬性中獲取this
var b =
}b.fn();//萌萌 b
window.b.fn();//萌萌 b
//this依賴呼叫函式前的物件
var o =
}}o.b.fn();
更改一下我們常規的用法,看一下有什麼不一樣:
var o1 =
}}o1.b.fn();//undefined
//再次強調,this指向函式執行前的物件
var o2 =
}}var j = o2.b.fn;
j();
function fn()
var a = new fn();
console.log(a.user); //萌萌
建構函式new的優先順序是最高的,this只會繫結到a上,不會被任何方式修改this的指向。順便提一下,建構函式的函式名第乙個字母大寫。
function fn1()
; }
var a = new fn1;
console.log(a.user); //undefined
function fn2() ;}
var b = new fn2;
console.log(b.user); //undefined
function fn3()
var c = new fn3;
console.log(c.user); //萌萌
function fn4()
var d = new fn4;
console.log(d.user); //萌萌
如果返回值是乙個物件,那麼this指向的就是那個返回的物件,如果返回值不是乙個物件那麼this還是指向函式的例項。
定時器中的this,指向的是window元素繫結事件,事件觸發後執行的函式中的this,指向的當前元素箭頭函式其實是沒有this的,這個函式中的this只取決於他外面的第乙個不是箭頭函式的函式的thisthis一旦繫結了上下文,就不會被任何**改變。
var x = 20;
var a = }}
console.log(a.fn());//function()
console.log((a.fn())());//20
console.log(a.fn()());//20
console.log(a.fn()() == (a.fn())());//true
console.log(a.fn().call(this));//20
console.log(a.fn().call(a));//15
答案:
1、物件呼叫方法,返回乙個方法
2、a.fn()返回的是乙個函式,()()這是自執行表示式,匿名函式自呼叫,this指向window
3、a.fn()相當於在全域性定義了乙個函式,然後再自己呼叫執行。this -> window
4、由2和3的答案可以推出4為true
5、這段**在全域性環境中執行,this -> window
關於js中遍歷總結
1.for迴圈 1 var2 arr 3for var i 0 i arr.length i js最常用的迴圈必然是for迴圈,最基礎的用法,用於陣列遍歷,但是 書寫過多。1 var2 arr 3 array.prototype.customfunc function 4for var item i...
關於js中 的小問題
先看下面兩個 為什麼第一行正常 編譯 執行 但第二行給出錯誤?注意是 referenceerror。0 uncaught referenceerror invalid left hand side expression in postfix operation 第一想法 0 應該和 是一樣的,所以兩...
關於js中 的小問題
先看下面兩個 為什麼第一行正常 編譯 執行 但第二行給出錯誤?注意是 referenceerror。0 uncaught referenceerror invalid left hand side expression in postfix operation 第一想法 0 應該和 是一樣的,所以兩...