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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript中this指向问题

發布時間:2024/9/30 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript中this指向问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

函數中的this指向:

????DOM(文檔對象模型的頂級對象是:document)

????BOM(瀏覽器對象模型的頂級對象是:window)

  • ? ? ? ?普通函數中的this指向-------window
  • ? ? ? ?對象.方法中的this指向-------當前的實例對象
  • ? ? ? ?定時器方法中的this指向------window
  • ? ? ? ?構造函數中的this指向-----實例對象
  • ? ? ? ?原型對象方法中的this指向----實例對象

  • apply()和call()改變this的指向:

    /*
    * apply()
    的使用語法
    *??
    函數名字.apply(對象, [參數1, 參數2, 參數3......])
    *??
    方法名字.apply(對象, [參數1, 參數2, 參數3......])
    * call()
    的使用語法
    *??
    函數名字.call(對象, 參數1, 參數1, 參數1)
    *??
    方法名字.call(對象, 參數1, 參數1, 參數1)
    *
    *
    作用:改變this的指向
    *
    不同的地方:參數傳遞的方式是不一樣的
    *
    *
    只要是想使用別的對象的方法,并且希望這個方法是當前對象的,那么就可以使用 apply() 或者是 call() 來改變 this 的指向。
    * */

    //
    演示代碼1
    function Person(name, age){
    ???
    this.age;
    ???
    this.fun1 = function (a, b) {
    ???????
    console.log("這是人的方法:a+b="+? (a+b) + "; " + this.score);
    ??? }
    }
    function Student(score) {
    ???
    this.score = score;
    }
    var per = new Person("張三", 25);
    var stu = new Student(100);
    // 未改變 this 指向前
    per.fun1.apply(null, [10,20]);?? // 這是人的方法:a+b=30; undefined
    per.fun1.call(null, 10, 20);??? // 這是人的方法:a+b=30;undefined
    //
    改變 this 指向
    per.fun1.apply(stu, [10, 20]); // 這是人的方法:a+b=30; 100
    per.fun1.call(stu, 10, 20);??? // 這是人的方法:a+b=30; 100
    /*
    *
    從上可以看出,score Student 的屬性,fun1 Person 的方法,通過傳入對象
    * stu
    ,修改了 fun1 this 的指向為 stu,從而獲得了 stu 屬性值 score
    * */

    // apply()
    call()方法來自哪里?
    console.log(per.fun1.__proto__ == Function.prototype); // 表明所有函數對象都是Function的實例對象
    console.log(Function.prototype); // { [nativecode] }
    // apply()
    call() 方法實際上并不在函數這個實例對象中,而是在Functionprototype

    bind()復制函數

    f/*bind是用來復制一份 * 使用的語法: *?? 函數名字.bind(對象, 參數1, 參數2, 參數3); ----->返回值是復制之后的這個函數 *?? 方法名字.bind(對象, 參數1, 參數2, 參數3); ----->返回值是復制之后的這個函數 * */ function Person(name, age){this.name = name;this.age = age;Person.prototype.play = function () {console.log(this.name + "在玩");} } function Student(name, age, score){this.name = name;this.age = age;this.score =score; } var per = new Person("小明", 15); var stu = new Student("小張", 16, 200); // 復制 per play() 方法給ff,并修改 this 指向(由 per 指向 stuvar ff = per.play.bind(stu); ff(); // 小張在玩
    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

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

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