日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

this

發布時間:2025/7/14 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 this 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

調用位置:函數在代碼中調用的位置,而不是聲明的位置。

調用棧:為了到達當前執行位置的所有調用的函數。

例子:

? ?

function baz(){//當前調用棧為baz//調用位置是全局作用域 console.log("baz");bar(); //bar的調用位置 }function bar(){//當前調用棧為bar->baz//調用位置是baz console.log("bar");foo(); //foo調用位置 }function foo(){//當前調用棧為foo->bar->baz//調用位置是bar console.log("foo");}

?

調用位置則是調用棧的第二個元素,可以使用調試器找出調用棧。

函數執行過程中如何使用調用位置決定this的綁定對象。

this綁定有四種規則:

1.默認綁定:this指向全局對象,可以看做無法應用其他規則時的默認規則。

??

function foo(){console.log(this.a);}var a = 2;foo() // 2

?

通過分析調用位置,發現foo()是直接使用不帶任何修飾的函數進行調用的。

?

2.隱式綁定:調用位置是否有上下文。

?

function foo(){console.log(this.a);}var obj = {a:2,foo:foo};obj.foo() //2

?

?

調用位置會使用obj上下文來引用函數。注意,當使用回調函數時,因為函數作為參數傳入時,實際上是一個隱式賦值操作,如下:

function foo(){console.log(this.a)}function doFoo(fn){//fn其實引用的是foo fn(); //調用位置 }var obj ={a:2,foo:foo}var a = "global";doFoo(obj.foo); //"global"

?

?

3.顯式綁定:即使用call,apply,bind等內置函數修改this的值。

var obj ={a:2 } function d (){console.log(this.a) } d.call(obj); //2

?


顯式綁定中有一種硬綁定:用于為了保證this不缺失,如下:

??

var obj ={a:2 } var abc = function(){d.call(obj); //d函數的this一直指向了obj } function d (){console.log(this.a) } abc(); //2

?

4:new綁定。(Js中的new與其他語言完全不同)

? new操作有以下四個步驟:

? 1.創建一個全新的對象。

? 2.這個對象會被執行原型鏈接。

? 3.這個對象會綁定到函數調用的this.

? 4.如果函數沒有返回其他對象,則new表達式中的函數調用自動返回這個對象。

?

function foo(){this.a =2;}var baz = new foo();console.log(baz.a); //2

?

最后是優先級:

? ?new>顯示>隱式>默認。

? ?具體例子可參考書P91~P。。。

??

轉載于:https://www.cnblogs.com/Darlietoothpaste/p/6391307.html

總結

以上是生活随笔為你收集整理的this的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。