最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript深入刨析this的指向以及如何修改指向

 更新時間:2021年11月12日 14:13:55   作者:小豬弟  
JavaScript中this也是一件很神奇 事情,在面向?qū)ο螅ū热鏹ava)中表示一個當(dāng)前的對象引用,但是在JavaScript中this不是固定不變的,而是隨著運(yùn)行環(huán)境的改變而改變

this

老規(guī)矩先看代碼:

方法中

function test(){
    console.log(this);
}

在這里插入圖片描述

對象中

Person={
  name:"張三",
  eat:function(){
      console.log(this)
  }
}

在這里插入圖片描述

在方法中,this表示該方法所屬的對象。因?yàn)榈谝粋€是window上的方法,所以打印了window,而eat方法是Person方法,所以打印除了對象Person。

所以可以看出單獨(dú)在控制臺使用this, 表示全局對象。

在這里插入圖片描述

隱藏的this

在對象,可以提前聲明一個一個:

var Person1={
    name:"張三",
    age:18
}
var Person2={
    name:"李四",
    age:19
}

這樣寫會很麻煩,所以可以借鑒一下java類的概念,可以這樣:

var Person=function(name,age){
    this.name=name,
    this.age=age
       
}
var Person1=new Person("張三",18);
var Person2=new Person("李四",19);

在這里插入圖片描述

其實(shí)在new的時候隱藏了一個return this,如果不使用new的話,發(fā)現(xiàn)其沒有返回這個新建的對象。

在這里插入圖片描述

那么現(xiàn)在補(bǔ)全一下看:

var Person=function(name,age){
    this.name=name,
    this.age=age
    return this;
}
var Person1=new Person("張三",18);
var Person2=new Person("李四",19);

在這里插入圖片描述

這樣的話,甚至可以偽造一個this的效果:

var Person=function(name,age){
    var that={};
    that.name=name,
    that.age=age
    return that;
}
var Person1=new Person("張三",18);
var Person2=new Person("李四",19);

在這里插入圖片描述

嚴(yán)格模式

this在嚴(yán)格模式和非嚴(yán)格模式下有些神奇的情況

function test() {
  return this;
}

# 如果js前面添加"use strict" 代表是嚴(yán)格模式
"use strict";
function test() {
  return this;
}

在這里插入圖片描述

這個可以看出在非嚴(yán)格模式下函數(shù)中,函數(shù)的所屬者默認(rèn)綁定到 this 上。所以可以打印出全局,但是嚴(yán)格模式下函數(shù)是沒有綁定到 this 上,這時候 this 是 undefined。

可以改變this指向

先看代碼

var Person=function(name,age){
    this.name=name,
    this.age=age,
    this.fun=function(){
         console.log("打印",this.name);
        }
}
var Person1=new Person("張三",18);
var Person2=new Person("李四",19);




在這里插入圖片描述

可以看出this指向的window中的a的值而不是方法test中的值,但是有些關(guān)鍵字是可以修改指向的。

在這里插入圖片描述

可以看出方法前的對象是誰,調(diào)用的this就是誰,但是可以修改的比如使用關(guān)鍵字 call ,apply ,bind

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

看上面的話,可以看出call和apply兩個很像,而bind不會立即執(zhí)行函數(shù),需要帶()執(zhí)行。

不過如果帶上參數(shù)的話,會發(fā)現(xiàn)call和apply還是不同的,但是其里面都必須是對象才行,畢竟this這個指向就是對象

關(guān)鍵字 直接調(diào)用方法 參數(shù)
call 會自動運(yùn)行使用的方法 都可以帶參數(shù)格式如下:obj1.obj1Fun.call( obj2, 參數(shù)1, 參數(shù)1 ………………);
apply 會自動運(yùn)行使用的方法 都可以帶參數(shù)格式如下:obj1.obj1Fun.apply( [ obj2, 參數(shù)1, 參數(shù)1 ………………]); 對比call的參數(shù)其參數(shù)用 [ ] 包住
bind 不會自動運(yùn)行使用的方法,需要后面+(),進(jìn)行調(diào)用 都可以帶參數(shù)格式如下:都可以帶參數(shù)格式如下:obj1.obj1Fun.bind( [ obj2, 參數(shù)1, 參數(shù)1 ………………])(); 對比apply的參數(shù)是一樣的,只不過其需要后面+()才能調(diào)用

到此這篇關(guān)于JavaScript深入刨析this的指向以及如何修改指向的文章就介紹到這了,更多相關(guān)JavaScript this指向內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • node.js使用nodemailer發(fā)送郵件實(shí)例

    node.js使用nodemailer發(fā)送郵件實(shí)例

    這篇文章主要介紹了node.js使用nodemailer發(fā)送郵件的方法,例子中使用的是QQ郵箱,你也可以修改成其它的郵箱如163、gmail等,需要的朋友可以參考下
    2014-03-03
  • 前端技巧之js-md5的簡單使用方法

    前端技巧之js-md5的簡單使用方法

    這篇文章主要給大家介紹了關(guān)于前端技巧之js-md5的簡單使用,js-md5是一種前端加密算法,用于在前端對密碼等敏感信息進(jìn)行加密,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • JavaScript字符串轉(zhuǎn)數(shù)字的簡單實(shí)現(xiàn)方法

    JavaScript字符串轉(zhuǎn)數(shù)字的簡單實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于JavaScript字符串轉(zhuǎn)數(shù)字的簡單實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • window.event.srcElement 得到事件源對象

    window.event.srcElement 得到事件源對象

    window.event.srcElement 得到事件源對象代碼,大家可以參考腳本之家以前發(fā)的代碼,多瀏覽兼容的。
    2009-05-05
  • 利用js對象彈出一個層

    利用js對象彈出一個層

    用js實(shí)現(xiàn)彈出層效果,一般用于代替alert
    2008-03-03
  • JavaScript 浮動定位提示效果實(shí)現(xiàn)代碼

    JavaScript 浮動定位提示效果實(shí)現(xiàn)代碼

    本來想做一個集合浮動定位和鼠標(biāo)跟隨的tooltips效果,但發(fā)現(xiàn)定位和鼠標(biāo)跟隨在一些關(guān)鍵的地方還是不同的,還是分開來吧。
    2009-09-09
  • 理解JavaScript變量作用域更輕松

    理解JavaScript變量作用域更輕松

    變量作用域是每門編程語言都會涉及的話題,也是作為一名程序員必需掌握的知識點(diǎn),能深入掌握變量作用域更有助于你編寫穩(wěn)定的程序。
    2009-10-10
  • JS判斷數(shù)組中是否有重復(fù)值得三種實(shí)用方法

    JS判斷數(shù)組中是否有重復(fù)值得三種實(shí)用方法

    數(shù)組中是否有重復(fù)值的判斷方法有很多,本文為大家推薦下比較實(shí)用的3種方法,感興趣的朋友可以參考下,希望對大家有所幫助
    2013-08-08
  • JS實(shí)現(xiàn)點(diǎn)擊掉落特效

    JS實(shí)現(xiàn)點(diǎn)擊掉落特效

    這篇文章主要介紹了JS實(shí)現(xiàn)點(diǎn)擊掉落特效,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • js電信網(wǎng)通雙線自動選擇技巧

    js電信網(wǎng)通雙線自動選擇技巧

    網(wǎng)站打開的速度快是相當(dāng)重要的baidu.com不管你是用的什么網(wǎng)絡(luò),都打開的很快
    2008-11-11

最新評論

禹州市| 资源县| 黄石市| 芒康县| 凤山市| 桦甸市| 晋江市| 云阳县| 白玉县| 临洮县| 凤城市| 克什克腾旗| 穆棱市| 盖州市| 铜川市| 英山县| 金乡县| 万年县| 维西| 龙州县| 常山县| 乌兰察布市| 阿瓦提县| 平泉县| 留坝县| 桂阳县| 湖州市| 手机| 宜都市| 仙居县| 陇南市| 常熟市| 德江县| 盐城市| 吉木萨尔县| 上犹县| 时尚| 合肥市| 平邑县| 麟游县| 和平区|