在函式中,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操作符呼叫建構函式的時候都發生了什麼.正好我有個答案是講建構函式的,我這裡原樣搬來 造函式其實和普通函式本質上並無區別,唯一的區別...