js中this指向有幾種情況,通過javascript 函數的調用方式來理解this

 2023-12-25 阅读 236 评论 0

摘要:前言 很多初學者會對 javascript 中的 this 的指向感到迷惑,?其實只要理解了 javascript 中函數的調用方式, 就不難理解 this 了 原生調用是最基本的函數調用方式 在 javascript 中, 函數一共有四種調用方式: 簡單調用對象成員函數調用new 調用所有的函數調用都能夠寫成以下形
前言
很多初學者會對 javascript 中的 this 的指向感到迷惑,?其實只要理解了 javascript 中函數的調用方式, 就不難理解 this 了
原生調用是最基本的函數調用方式
在 javascript 中, 函數一共有四種調用方式:
  • 簡單調用
  • 對象成員函數調用
  • new 調用
  • 所有的函數調用都能夠寫成以下形式, 我們稱之為原生調用, 也是第四種調用方法
fn.call(this, args...) // 或者, fn.apply(this, argsArray)
    • fn 代表被調用的函數,
    • call 是 javascript 語言自帶的 Function 類的原生方法,
    • this 為調用 fn 的環境
    • args 為電泳 fn 時傳入的參數
接下來, 試著把前三種函數的調用方式改寫成原生調用, 順便探討每種調用方式中, this的指向
簡單的函數調用
// 在全局換進中定義 fn
function fn(arg){console.log(this) // 使用了this//...
}fn(arg)// 寫成原生調用 
// fn.call(window, arg) // 此時 this 指向 window // 在es5嚴格模式下, 相當于 fn.call(undefined, arg) // 此時 this 指向 undefined

?

對象的成員函數調用
var person = {name: "Brendan Eich", hello: function(thing) { console.log(this + " says hello " + thing)}
}person.hello("world") 
// 寫成原生調用
// person.hello.call(person, "world")    // 此時, this 指向person
?
new 調用
function Person(){this.name = 'zhao'
}
var person = new Person()// 寫成原生調用
function createPerson(){var obj = {}obj.__proto__ = Person.prototypePerson.call(oj)                        // 此時, this 指向 objreturn obj
}varperson = createPerson()

?

?

轉載于:https://www.cnblogs.com/linyuzhaozhao/p/7125909.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/195017.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息