91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript中this有幾種綁定規則

發布時間:2022-03-03 10:49:06 來源:億速云 閱讀:128 作者:iii 欄目:web開發

這篇“JavaScript中this有幾種綁定規則”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“JavaScript中this有幾種綁定規則”文章吧。

我們先說一個最簡單的this在全局指向的是什么呢?

這個問題很簡單在瀏覽器中測試this,全局指向的是window,不過在開發過程中this很少在全局使用,一般都是在函數內的

this有幾種綁定規則?

綁定一:默認綁定

// 1.案例一: 

function foo() {

   console.log(this)

 }

 foo()//window

// 2.案例二:

function foo1() {

  console.log(this)

}

function foo2() {

  console.log(this)

  foo1()

}

function foo3() {

  console.log(this)

  foo2()

}

foo3()//window

// 3.案例三:

var obj = {

  name: "why",

  foo: function() {

    console.log(this)

  }

}

var bar = obj.foo

bar() // window

綁定二:隱式綁定

// 1.案例一:

var obj = {

  name: "why",

  foo: foo

}

obj.foo() // obj對象

// 2.案例二:

var obj = {

  age: "哈哈哈",

  eating: function () {

    console.log(this + "在吃東西")

  },

  running: function () {

    console.log(this + "在跑步")

  }

}

obj.eating()//obj對象

obj.running()//obj對象

var fn = obj.eating

fn()

//window,為什么是window呢因為把obj.eating這個函數賦值給了fn,fn在全局調用的所以指向的是window

// 3.案例三:

var obj1 = {

  name: "obj1",

  foo: function () {

    console.log(this)

  }

}

var obj2 = {

  name: "obj2",

  bar: obj1.foo

}

obj2.bar()//obj2對象

綁定三:顯示綁定

function foo() {

  console.log("函數被調用了", this)

}

//1.foo直接調用和call/apply調用的不同在于this綁定的不同

//foo直接調用指向的是全局對象(window)

foo()

var obj = {

  name: "obj",

  // age:foo//可以簡寫這一步

}

//call/apply是可以指定this的綁定對象

foo.call(obj)//obj對象

foo.apply(obj)//obj對象

foo.apply("aaaa")//aaaa

// 2.call和apply有什么區別?

function sum(num1, num2, num3) {

  console.log(num1 + num2 + num3, this)

}

sum.call("call", 20, 30, 40)//傳遞參數后面可以傳無限個數值,都是用逗號分割

sum.apply("apply", [20, 30, 40])//傳遞參數用數組接收,一樣可以傳無限個數值,用逗號分割

// 3.call和apply在執行函數時,是可以明確的綁定this, 這個綁定規則稱之為顯示綁定

綁定四:new綁定

// 我們通過一個new關鍵字調用一個函數時(構造器), 這個時候this是在調用這個構造器時創建出來的對象

// this = 創建出來的對象

// 這個綁定過程就是new 綁定

function Person(name, age) {

  this.name = name

  this.age = age

}

var p1 = new Person("哈哈哈", 18)

console.log(p1.name, p1.age)//哈哈哈,18

var p2 = new Person("呵呵呵", 30)

console.log(p2.name, p2.age)//呵呵呵,30

這些的案例可以給我們什么樣的啟示呢?

1.函數在調用時,JavaScript會默認給this綁定一個值;

2.this的綁定和定義的位置(編寫的位置)沒有關系;

3.this的綁定和調用方式以及調用的位置有關系;

4.this是在運行時被綁定的;

最后說一下默認綁定和顯示綁定bind沖突: 優先級(顯示綁定)

以上就是關于“JavaScript中this有幾種綁定規則”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

天门市| 武邑县| 金山区| 五常市| 潜江市| 宁蒗| 钟祥市| 寿光市| 科技| 甘德县| 工布江达县| 乡宁县| 阳朔县| 双辽市| 沐川县| 新兴县| 垦利县| 五大连池市| 陆丰市| 柘荣县| 晋州市| 汉川市| 深水埗区| 普宁市| 广灵县| 辰溪县| 松原市| 白朗县| 鹰潭市| 眉山市| 托里县| 蛟河市| 湖州市| 广饶县| 松滋市| 庄浪县| 卓资县| 教育| 克拉玛依市| 高唐县| 沁阳市|