
วิธีเริ่มต้นใช้งาน VUE3.0 อย่างรวดเร็ว: เรียนรู้
ในบทนำต่าง ๆ ที่เราได้เห็นเกี่ยวกับวิธีการกำหนดวิธีการชี้ตำแหน่งนี้ ประโยค "สิ่งนี้ชี้ไปที่วัตถุที่เรียกมันในท้ายที่สุด" ถือเป็น แต่การเผชิญหน้า เรามักจะสับสนกับสถานการณ์ต่างๆ จากความเข้าใจในสถานการณ์ต่างๆ ของผม ผมหยิบยกประโยคขึ้นมา ว่า "ลูกศร เวลา และโครงสร้าง ดูที่สถานการณ์พิเศษ ดูที่หมายเลขจุดสำหรับการโทรธรรมดา อย่ามองที่ด้านหน้าสำหรับจุดหลัง แล้วจึงตัดสิน" ตามหลักการที่ใกล้ที่สุดและสิ่งสุดท้ายที่เหลืออยู่คือหน้าต่าง" .
ฟังก์ชันลูกศร
ฟังก์ชันลูกศรเองไม่มีสิ่งนี้ ดังนั้นจึงไม่มีการเปลี่ยนแปลงนี้ โดยจะจับส่วนนอกนี้โดยใช้
var name = "windowsName";
วาร์ ก = {
ชื่อ: "เชอร์รี่",
เอฟเอ็น() {
setTimeout(()=>{
console.log(this.name);
},0)
-
-
a.fn() // การวิเคราะห์แบบเชอร์รี่: ขั้นแรก ให้ object a เรียกใช้ฟังก์ชัน fn ดังนั้นฟังก์ชัน fn นี้จึงชี้ไปที่ object a จากนั้นลูกศรจะจับส่วนด้านนอกของสิ่งนี้ จากนั้นจะไม่ใช่สิ่งนี้ใน setTimeout แต่เป็นของ ฟังก์ชั่น fn ดังนั้นในที่สุดรับชื่อในวัตถุ a
ตัวจับเวลาของฟังก์ชันโทรกลับภายในฟังก์ชันหน่วง
เวลา
ชี้ไปที่หน้าต่างวัตถุทั่วโลกvar name = "windowsName";
วาร์ ก = {
ชื่อ: "เชอร์รี่",
เอฟเอ็น() {
setTimeout (ฟังก์ชัน () {
console.log(this.name);
},0)
-
-
a.fn() //windowsName analysis: ขั้นแรก ให้ object a เรียกใช้ฟังก์ชัน fn จากนั้นฟังก์ชัน callback ใน setTimeout ที่นี่จะเป็นฟังก์ชันที่ไม่ระบุชื่อ ซึ่งเป็นฟังก์ชันธรรมดา จากนั้นฟังก์ชันในฟังก์ชันที่ไม่ระบุตัวตนจะชี้ไปที่หน้าต่าง
var name = "ชื่อหน้าต่าง";
วาร์ ข={
ชื่อ: "setTimeoutName"
-
วาร์ ก = {
ชื่อ: "เชอร์รี่",
เอฟเอ็น() {
setTimeout((ฟังก์ชัน (){
console.log(this.name);
}).ผูก(ข),0)
-
-
a.fn() //การวิเคราะห์ setTimeoutName : ขั้นแรก ให้ object a เรียกใช้ฟังก์ชัน fn จากนั้นฟังก์ชัน callback ใน setTimeout ที่นี่จะเป็นฟังก์ชันที่ไม่ระบุชื่อ ซึ่งเป็นฟังก์ชันธรรมดา จากนั้นฟังก์ชันนี้ในฟังก์ชันที่ไม่ระบุชื่อจะชี้ไปที่หน้าต่าง ใช้การผูกเพื่อเปลี่ยนฟังก์ชันที่ไม่ระบุชื่อ สิ่งนี้ชี้ไปที่วัตถุ b ดังนั้นชื่อ
คอนสตรัคเตอร์
ในออบเจ็กต์ b จึงชี้ไปที่อ็อบเจ็กต์อินสแตนซ์ที่สร้างขึ้นในคอนสตรัคเตอร์
หมายเหตุ: หากวัตถุถูกส่งคืนในตัวสร้าง จะไม่มีอินสแตนซ์ใหม่ วัตถุเมื่อสร้างขึ้น แต่สิ่งนี้ วัตถุที่ส่งคืนโดย
ฟังก์ชัน fn(){
อายุ = 37;
-
var a = fn ใหม่ ();
console.log(a.age); // 37
ก. อายุ = 38;
console.log(fn); // { this.age = 37; }
console.log(a.age); // 38 การวิเคราะห์: ที่นี่เราสร้างอ็อบเจ็กต์ a ผ่าน Constructor ซึ่งเทียบเท่ากับการเปิดตำแหน่งใหม่และคัดลอกเนื้อหาของ Constructor เวลานี้ชี้ไปที่วัตถุ a การแก้ไขเนื้อหาในวัตถุ a ไม่ส่งผลกระทบต่อการส่งผ่านของ
การตัดสิน
หมายเลขจุดคอนสตรัคเตอร์. ปฏิบัติตามหลักการความใกล้ชิด
var a = {
อายุ:10,
ข: {
อายุ:12,
เอฟเอ็น(){
console.log(this.age);
-
-
-
abfn(); //12 การวิเคราะห์: Object a เรียกใช้ฟังก์ชัน fn ของ object b มีสอง . ที่ด้านหน้าของฟังก์ชัน fn จากนั้นอันที่ใกล้ที่สุดคือ object b ดังนั้นฟังก์ชัน fn นี้จึงชี้ไปที่ object b และ สิ่งสุดท้ายที่ได้คืออายุของ b
var a = {
อายุ:10,
ข: {
อายุ:12,
เอฟเอ็น(){
console.log(this.age); //ไม่ได้กำหนด
-
-
-
วาร์ ค = {
อายุ:20,
-
วาร์ ง = {
อายุ:30,
-
abfn.bind(c).bind(d)(); //20 การวิเคราะห์: วัตถุ a เรียกใช้ฟังก์ชัน fn ของวัตถุ b จากนั้นใช้การผูกเพื่อเปลี่ยนทิศทางของสิ่งนี้ ในเวลานี้ fn มี . โดยไม่คำนึงถึงจุดก่อน . เพียงแค่ดูที่ด้านหลัง จากนั้นการผูกล่าสุดจะเปลี่ยนจุดนี้เป็น c จากนั้นจุดนี้ของฟังก์ชัน fn ก็คืออ็อบเจ็กต์ c และสิ่งที่คุณได้รับคือ
ฝึก
อายุexternalFunc() { ของ วัตถุค
console.log(นี่) // { x: 1 }
ฟังก์ชั่น func() {
console.log(นี่) // หน้าต่าง
-
สนุก()
-
ภายนอกFunc.bind({ x: 1 })() obj = {
ฟังก์ชั่น() {
const arrowFunc = () => {
console.log(this._name)
-
กลับลูกศรFunc
-
_ชื่อ: "obj",
-
obj.func()() //obj
func = obj.func
func()() //ไม่ได้กำหนด
obj.func.bind({ _name: "newObj" })()() //newObj
obj.func.bind()()() //ไม่ได้กำหนด
obj.func.bind({ _name: "bindObj" }).apply({ _name: "applyObj" })() //bindObj ใช้ฟังก์ชัน Apply, Call และ Bind เพื่อเปลี่ยนทิศทางของ
สิ่งนี้ ข้างต้นนี้ ความแตกต่าง
ระหว่าง
thisArg , [ argsArray] call(thisArg, arg1, arg2, ...)
in Apply คืออาร์เรย์ และสิ่งที่ถูกส่งผ่านในการเรียก คือ
bind(thisArg[, arg1[, arg2[, ...]]])()
bind() this ถูกกำหนดให้เป็นพารามิเตอร์แรก และพารามิเตอร์ที่เหลือจะถูกใช้เป็นพารามิเตอร์ของฟังก์ชันใหม่เพื่อใช้เมื่อเรียกใช้หากมีข้อผิดพลาด โปรดแก้ไขให้ฉันด้วย! - ขอบคุณทุกคนที่อ่าน!
วัสดุอ้างอิง
https://juejin.cn/post/6946021671656488991#comment
[คำแนะนำวิดีโอสอนที่เกี่ยวข้อง: ส่วนหน้าของเว็บ]
ข้างต้นเป็นวิธีที่คุณสามารถเข้าใจปัญหาการชี้ของ JS นี้ได้อย่างไร ดูรายละเอียดของบทความนี้ สำหรับข้อมูลเพิ่มเติม โปรดอ่านบทความอื่น ๆ ที่เกี่ยวข้องบนเว็บไซต์ php Chinese!
