摘要:一因?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
摘要:中創(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 = ...
摘要:構(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è)腳印,量變引...
摘要:類型請(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ù)最多...
摘要:前端筆記基本數(shù)據(jù)類型種數(shù)據(jù)類型基本類型復(fù)雜類型基本類型與引用類型的區(qū)別基本類型基本類型,是按值訪問,可以操作保存在變量中的實(shí)際值基本類型的值不可變輸出輸出其中的實(shí)際值并未變化,方法是返回了一個(gè)新的字符串也不能對(duì)基本類型添加屬性和方法表明了基 前端筆記/JavaScript 基本 數(shù)據(jù)類型 6種數(shù)據(jù)類型 基本類型: Undefined、Null、Boolean、String、Numbe...
摘要:線程在執(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的繼承 ...
閱讀 3402·2023-04-26 01:46
閱讀 2931·2023-04-25 20:55
閱讀 5507·2021-09-22 14:57
閱讀 2988·2021-08-27 16:23
閱讀 1726·2019-08-30 14:02
閱讀 2077·2019-08-26 13:44
閱讀 655·2019-08-26 12:08
閱讀 2975·2019-08-26 11:47