成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

this指向性的問題匯總

baukh789 / 2076人閱讀

摘要:一因?yàn)橹械氖窃谶\(yùn)行期綁定的,因此中的關(guān)鍵字具備多重含義。二具體在應(yīng)用中,的指向大概可以分為以下四種。例如,或者都是為了改變函數(shù)內(nèi)部的指向。

一、因?yàn)镴avaScript中的this是在運(yùn)行期綁定的,因此JavaScript中的this關(guān)鍵字具備多重含義。

二、具體在應(yīng)用中,this的指向大概可以分為以下四種。

1.作為對(duì)象的方法調(diào)用 obj.run()

2.作為普通函數(shù)調(diào)用 function()

3.作為構(gòu)造函數(shù)調(diào)用 var b =new a();

4.function.prototype.call或者function.prototype.apply調(diào)用

三、作為對(duì)象的方法調(diào)用和作為普通函數(shù)調(diào)用

window.name=bj;

var obj={

name:zzy,

getName(){

    console.log(this.name) 

    }

}

obj.getNAme();//輸出的zzy

var getA=obj.getName;

getA(); //輸出的為bj

不管getA之前是getNAme(),還是其他某個(gè)對(duì)象的屬性,只要最后是以getA(),這種方式調(diào)用的,均視為普通函數(shù)調(diào)用,此時(shí)this指向window對(duì)象

但是,在ES5的strict模式下,作為函數(shù)調(diào)用的 this被規(guī)定不會(huì)指向全局對(duì)象

getA(); //輸出的為underfined

四.構(gòu)造函數(shù)的調(diào)用

通常情況下,構(gòu)造函數(shù)里的this指向那個(gè)返回的這個(gè)對(duì)象,但是如果構(gòu)造器顯示的返回了一個(gè)object類型的對(duì)象,則this指向返回的object對(duì)象

var Myclass = function(){

this.name = "beidan";

}

var obj = new Myclass();

console.log(obj.name);//beidan

var Myclass = function(){

this.name = "beidan";

return{        //顯示的返回一個(gè)對(duì)象,注意!既要是顯示,即有return,也要是對(duì)象{}

    name:"test"

}

}

var obj = new Myclass();

console.log(obj.name);//test

五.function.prototype.call或function.prototype.apply調(diào)用

call,apply都是為了改變函數(shù)內(nèi)部this的指向。例如,function.apply()或者

function.apply()都是為了改變函數(shù)內(nèi)部的this指向。

二者的作用完全一樣,只是接受參數(shù)的方式不太一樣。

function.call(this, arg1, arg2);        //參數(shù)列表arg1,arg2

function.apply(this, [arg1, arg2]);    //參數(shù)數(shù)組 [arg1,arg2]

第一個(gè)參數(shù),指定了那個(gè)函數(shù)體內(nèi)this對(duì)象的指向,它可以是javascript對(duì)象,如果為null,則函數(shù)體內(nèi)的this會(huì)指向默認(rèn)的window

第二個(gè)參數(shù),call 需要把參數(shù)按順序傳遞進(jìn)去,而 apply 則是把參數(shù)放在數(shù)組里。當(dāng)參數(shù)不確定數(shù)量時(shí)用 apply ,然后把參數(shù) push 進(jìn)數(shù)組傳遞進(jìn)去?;蛘咭部梢酝ㄟ^ arguments來獲取所有的參數(shù)。這樣看來,apply的使用率更高。

1.修正this指向

在實(shí)際開發(fā)過程中,會(huì)出現(xiàn)一下的情況

document.getElementById("div1").onclick = function(){

console.log(this.id);  //div1

var func = function(){

    console.log(this.id);   

}

func();  //通過普通函數(shù)調(diào)用,this指向window,輸出undefined

}

使用call來改變this的指向

document.getElementById("div1").onclick = function(){

console.log(this.id);  //div1

var func = function(){

    console.log(this.id);

}

func.call(this); //使func函數(shù)內(nèi)部的this指向當(dāng)前的函數(shù)對(duì)象,輸出div1

}

2.模擬繼承

function fruits() {}

fruits.prototype = {

color: "red",

say: function() {

    console.log("My color is "+ this.color);

}

}

var apple = new fruits;

apple.say(); //My color is red

但是,如果我們還有其它 2個(gè)對(duì)象 banana= {color : "yellow"} ,orange = {color:‘orange’},想使用say方法,但是又不想對(duì)它們重新定義say方法。

那么,我們可以用apply或者call 借用 fruit里面的say方法

banana = {color: "yellow"};

orange = {color:‘orange’};

apple.say.call(banana); //My color is yellow

apple.say.apply(orange ); //My color is orange

這里需要注意的是banana繼承apple.say的方法;

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/109430.html

相關(guān)文章

  • js對(duì)象創(chuàng)建方法匯總及對(duì)比

    摘要:中創(chuàng)建對(duì)象的方式有很多,尤其是基于原型的方式創(chuàng)建對(duì)象,是理解基于原型繼承的基礎(chǔ)。該函數(shù)中的屬性指向該源性對(duì)象當(dāng)通過該函數(shù)的構(gòu)造函數(shù)創(chuàng)建一個(gè)具體對(duì)象時(shí),在這個(gè)對(duì)象中,就會(huì)有一個(gè)屬性指向原型。 js中創(chuàng)建對(duì)象的方式有很多,尤其是基于原型的方式創(chuàng)建對(duì)象,是理解基于原型繼承的基礎(chǔ)。因此在這里匯總一下,并對(duì)各種方法的利弊進(jìn)行總結(jié)和對(duì)比,不至于以后對(duì)這些概念有模糊。 簡(jiǎn)單方式創(chuàng)建 var o = ...

    piapia 評(píng)論0 收藏0
  • 【Step-By-Step】一周面試題 && 答案匯總 / 01

    摘要:構(gòu)造函數(shù)返回值是或,這種情況下指向的是返回的對(duì)象。并執(zhí)行了構(gòu)造函數(shù)中的方法如果函數(shù)沒有返回其他對(duì)象,那么指向這個(gè)新對(duì)象,否則指向構(gòu)造函數(shù)中返回的對(duì)象。對(duì)于文檔來說應(yīng)當(dāng)是唯一的。的值意味著其不可能是基本數(shù)據(jù)類型。 關(guān)于【Step-By-Step】 不積跬步無以至千里。 Step-By-Step (點(diǎn)擊進(jìn)入項(xiàng)目) 是我于 2019-05-20 開始的一個(gè)項(xiàng)目,項(xiàng)目愿景:一步一個(gè)腳印,量變引...

    xiaolinbang 評(píng)論0 收藏0
  • 一些前端面試題匯總

    摘要:類型請(qǐng)求成功后的回調(diào)函數(shù)。參數(shù)由服務(wù)器返回,并根據(jù)參數(shù)進(jìn)行處理后的數(shù)據(jù)描述狀態(tài)的字符串。默認(rèn)設(shè)置下,所有請(qǐng)求均為異步請(qǐng)求。類型發(fā)送請(qǐng)求前可修改對(duì)象的函數(shù),如添加自定義頭。對(duì)象是唯一的參數(shù)。如果返回可以取消本次請(qǐng)求。設(shè)置為將不緩存此頁面。 題目一 : 統(tǒng)計(jì)字符串中出現(xiàn)次數(shù)最多的字符 eg : var s = abcdefghijklabcdaaaefadca ; // 其中a出現(xiàn)次數(shù)最多...

    mtunique 評(píng)論0 收藏0
  • JavaScript匯總

    摘要:前端筆記基本數(shù)據(jù)類型種數(shù)據(jù)類型基本類型復(fù)雜類型基本類型與引用類型的區(qū)別基本類型基本類型,是按值訪問,可以操作保存在變量中的實(shí)際值基本類型的值不可變輸出輸出其中的實(shí)際值并未變化,方法是返回了一個(gè)新的字符串也不能對(duì)基本類型添加屬性和方法表明了基 前端筆記/JavaScript 基本 數(shù)據(jù)類型 6種數(shù)據(jù)類型 基本類型: Undefined、Null、Boolean、String、Numbe...

    用戶83 評(píng)論0 收藏0
  • 前端面試題目匯總

    摘要:線程在執(zhí)行過程中與進(jìn)程還是有區(qū)別的。但是線程不能夠獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制。從邏輯角度來看,多線程的意義在于一個(gè)應(yīng)用程序中,有多個(gè)執(zhí)行部分可以同時(shí)執(zhí)行。 關(guān)于js 1.原型鏈 2.AJAX請(qǐng)求數(shù)據(jù)時(shí)解決緩存的辦法3.js的繼承 ...

    lastSeries 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

baukh789

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<