this 指向二 建構函式的this指向

2021-07-23 19:04:54 字數 1260 閱讀 5910

在函式中,this沒有作用域和繼承的概念,this的指向主要看呼叫的方式,詳情請看this指向一,今天主要擼一擼當new 關鍵字呼叫函式時thsi內部的指向,分兩種情況:

1.建構函式沒有呼叫return語句或者呼叫return語句但是沒有返回值或者返回乙個原始值得時候

當new呼叫方法時,會建立乙個空物件並且試圖初始化這個空物件,這時this的指向自然就是指向這個新建立的物件了

2.建構函式有用return顯示返回乙個物件的時候,這時new 呼叫方法的返回值就是這個return 的物件,例如

function person(){

this.age=18;

this.name="zhangshan";

var self=this;

this.showname=function(){

console.log(this.name);

var p1=new person();

p1.showname();//呼叫這個方法的時候,showname方法的this指向p1,self也是指向p1; 得到的值是zhangshan

但是如果建構函式變成這樣:

function person(){

this.age=18;

this.name="zhangshan";

var self=this;

this.showname=function(){

console.log(this.name);

return {

「age":28,

"name":"lishi",

"showname":function(){

console.log(this.name);

var p1=new person;//建構函式沒有形參時可以省略括號

p1.showname();//呼叫這個方法的時候,showname方法的this指向p1,self也是指向的是執行new建立並且初始化的空物件; 得到的值是lishi;

總結:不管建構函式是否有return物件,用new執行函式都會建立乙個空物件並且試圖初始化這個空物件,如果沒有return語句或者return語句沒有值或者return乙個原始值的話

,函式執行的返回值就會是這個新建立的物件。但是,但是,但是如果有return乙個物件的話,就會直接返回return的這個物件,不會返回新建立的物件,但是確實有新建乙個物件並初始化,上面**中的self就是永遠指向這個新建立的物件,因為在return之前self就已經把this的位址儲存起來了,所以不管this指向**都不會影響到self。

this的指向 普通函式 建構函式 call

在建構函式中,this指向例項物件,普通函式中,this指向它的呼叫者,誰呼叫這個函式,this就是誰 call方法也可以修改this指向 functionfn fn window?上面例子中,是普通函式,沒有呼叫物件,其實呼叫者就是window,所以this指向window var obj new...

this指向建構函式原型鏈改變指向關係變動

輸出下面幾個方法得到結果 function foo this.a function foo.prototype.a function foo.a function foo.a 4 let obj new foo obj.a 2 foo.a 1解析 1.宣告的乙個函式foo 2.函式foo原型鏈上掛載...

關於js建構函式中this的指向問題

js裡沒有類.建構函式是個函式,this指向的是個物件,this蒙上眼睛指也指不到建構函式去.建構函式的this指向建立的例項物件無疑.要明白這一點,要先弄明白,用new操作符呼叫建構函式的時候都發生了什麼.正好我有個答案是講建構函式的,我這裡原樣搬來 造函式其實和普通函式本質上並無區別,唯一的區別...