先看導圖有大概的理解:
a.嚴格模式下this指向的undefined;
b.非嚴格模式(use strict)this指向window;
在函式中使用理解:
1)誰執行函式this就指向誰;
var obj =
};obj.b();//10
== obj.b().call(obj) 指向的是呼叫的它的obj物件
var fn = obj.b;
fn(); // this指向window物件
2)函式在被直接呼叫的時候,this指向window
-this在call方法:平時執行函式只是省略了call,可以理解為 say(『here』) == say.call(window,'here');
圖二:
function say(content) come $`);
};/**
*call執行步驟
*把第二個引數作為函式執行的引數傳入
*函式執行時的this執行第乙個引數
*呼叫函式的語法糖
*/say.call('i','here'); //hello word i come here
//正常呼叫的話,this指向到window的物件
say('here'); //hello word [object window] come here
3)匿名函式(iife)的this指向window物件;
圖三
(function (content))('here');
//2個其實是乙個意思,就是乙個簡寫了
(function (content)).call(window,'here');
4)函式作為new出來的新物件,this指向新物件
圖四
var a = function();
var b = new a(); // 列印 a的物件
b.a; //20
--總結常見面試題:
題一:
/***第乙個列印的20,因為是obj呼叫了函式,this的指向是obj(上面理解中第一點);第二個列印是10,屬於函式直接執行,物件會指向window(理解中的第二點)
*/var a = 10;
var obj =
fn();
}}obj.b(); // 20 10
題二:var a = 10;
var obj =
}obj.b(); // 20
var fn = obj.b;
fn(); //10 , 屬於直接呼叫,this指向window
var obj2 = ;
obj2.c(); //30 , 屬於obj2呼叫了,this就指向obj2了
題三:var title = 'hello';
var obj =
}var fn = obj.say;
fn(); // hello
obj.say();//hi
var obj2 =
}obj2.say(obj.say);//傳引數後,還是屬於直接呼叫 所以this指向的是window hello
obj2.say = obj.say;
obj2.say();
//obj的say方法賦值給了obj2,obj2就變成了下面
var obj2 =
}所以,obj2.say()呼叫就是 obj2.say().call(obj2) ,this指向了obj2
不在函式中使用,this指向了window物件
var a = 1;
var obj = ;
console.log(obj.b);//2
箭頭函式沒有this,預設指向定義它的時候的所在的物件
//全域性變數建立時,指向window
const obj1 = ()=>;
obj1();// window
//物件中建立時,指向當前物件
var obj2 = ;
fn();//aa
}};obj2.b();
MySQL的LOAD FILE方法在使用時的問題
mysql的load file方法在使用時的問題 在執行 update tables name set file path load file tmp aa.txt where file id 1 時file path的值一直為 null 無法把檔案匯入到資料庫裡面 後來試了無數次,偶然在資料庫服務...
this指向的簡單理解
this 本身含義 執行上下文 只能是物件 不是物件強行轉換成物件 this一般存在於函式中,表示當前函式的執行上下文,如果函式沒有被執行,那麼this沒有內容,只有函式在執行後this才有繫結。函式執行的位置 1 預設執行 自己執行自己 fn 預設情況下的隱式執行 this指向window 嚴格模...
this指向自己理解的
關於this,總結起來,主要有以下幾個途徑能夠被運用到。1 物件方法中呼叫this 如果函式被當中物件的乙個方法進行呼叫,則this值指向該物件。var person person.sayname this person,alert welcome alice 在這裡,函式的this指向該物件 即 ...