国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

javascript中的self和this用法小結(jié)_javascript技巧

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 21:19:17
文檔

javascript中的self和this用法小結(jié)_javascript技巧

javascript中的self和this用法小結(jié)_javascript技巧:一、 起因 那天用到prototype.js于是打開看看,才看幾行就滿頭霧水,原因是對js的面向?qū)ο蟛皇呛苁煜ぃ谑前俣?google了一把,最后終于算小有收獲,寫此紀(jì)念一下^_^。 prototype.js代碼片段 代碼如下:var Class = { create: functi
推薦度:
導(dǎo)讀javascript中的self和this用法小結(jié)_javascript技巧:一、 起因 那天用到prototype.js于是打開看看,才看幾行就滿頭霧水,原因是對js的面向?qū)ο蟛皇呛苁煜?,于是百?google了一把,最后終于算小有收獲,寫此紀(jì)念一下^_^。 prototype.js代碼片段 代碼如下:var Class = { create: functi

一、 起因
那天用到prototype.js于是打開看看,才看幾行就滿頭霧水,原因是對js的面向?qū)ο蟛皇呛苁煜?,于是百?google了一把,最后終于算小有收獲,寫此紀(jì)念一下^_^。
prototype.js代碼片段

代碼如下:
var Class = {
create: function() {
return function() {
this.initialize.apply(this , arguments);
}
}
}
// Class使用方法如下
var A = Class.create();
A. prototype={
initialize:function(v){
this .value=v;
}
showValue:function(){
alert(this.value);
}
}
var a = new A(‘helloWord!');
a. showValue();//彈出對話框helloWord!

l initialize是什么?
l apply方法是干什么的?
l arguments變量呢?
l 為什么new A后就會執(zhí)行initialize方法?
尋找答案:

二、 Js的面向?qū)ο?
initialize是什么?
只不過是個(gè)變量,代表一個(gè)方法,用途是類的構(gòu)造函數(shù)。
其具體功能靠js的面向?qū)ο笾С?,那么js的面向?qū)ο笫鞘裁礃幼拥哪??和java 的有什么相同與不同?
看代碼:

代碼如下:
代碼如下:
var ClassName = function(v){
this.value=v;
this.getValue=function(){
return this.value;
}
this.setValue=function(v){
this.value=v;
}
}

那么JS中的函數(shù)和類有什么不同呢?
其實(shí)是一樣的,ClassName就是一個(gè)函數(shù),當(dāng)出現(xiàn)在new后面的時(shí)候就作為一個(gè)構(gòu)造函數(shù)來構(gòu)造對象。

代碼如下:
var objectName1 = new ClassName(“a”);//得到一個(gè)對象

其中objectName1就是執(zhí)行ClassName構(gòu)造函數(shù)后得到的對象,而在ClassName函數(shù)中的this指的就是new之后構(gòu)造出來的對象,所以objectName1會后一個(gè)屬性和兩個(gè)方法??梢酝ㄟ^這樣來調(diào)用他們:

代碼如下:
objectName1.setValue(''hello'');
alert(objectName1.getValue());//對話框hello
alert(objectName1.value) ;//對話框hello

那么

代碼如下:
var objectName2 = ClassName(“b”);//得到一個(gè)對象

這樣objectName2得到的是什么呢?顯然是方法的返回值,這里ClassName只作為了一個(gè)普通的函數(shù)(雖然首字母大寫了)。但是在之前寫的ClassName中并沒有返回值,所以objectName2會是undifinded那么“b”賦給誰了呢?在這并沒有產(chǎn)生一個(gè)對象,而只是單純的執(zhí)行這個(gè)方法,所以這個(gè)“b”賦值給了調(diào)用這個(gè)方法的對象window,證據(jù)如下:
var objectName2 = ClassName(“b”);//得到一個(gè)對象
alert(window.value);//對話框b
所以JS中的所有function都是一樣的,但是用途可能是不同的(用作構(gòu)造對象抑或是執(zhí)行一個(gè)過程)。
下面該回到主題了initialize是干什么的?

代碼如下:
代碼如下:
var Class = {
create: function() {
return function() {
this.initialize.apply(this , arguments);
}
}
}
var A = Class.create();

這段代碼是構(gòu)造個(gè)一個(gè)function復(fù)制給A,這個(gè)function是

代碼如下:
代碼如下:
function() {
this.initialize.apply(this , arguments);
}

并且后面這個(gè)方法是用來做構(gòu)造函數(shù)的。當(dāng)使用這個(gè)構(gòu)造函數(shù)來構(gòu)造對象的時(shí)候,會讓構(gòu)造出來的這個(gè)對象的initialize變量執(zhí)行apply()方法,apply()的用途后面在說,繼續(xù)說initialize。這樣在初始化對象的時(shí)候會聯(lián)系到initialize(怎么聯(lián)系就要看apply的了)。
那么

代碼如下:
代碼如下:
A.prototype={
initialize:function(v){
this .value=v;
}
showValue:function(){
alert(this.value);
}
}

是什么意思呢?
Prototype是“原型”的意思。A是一個(gè)function(),那么A. prototype,就是function中的一個(gè)變量,其實(shí)是個(gè)對象。這個(gè)對象擁有什么方法,那么function產(chǎn)生的對象就擁有什么方法,故
var a = new A(‘helloWord!');
a. showValue();//彈出對話框helloWord!
所以a對象也會有initialize方法,不只如此,每一個(gè)有A構(gòu)造出來的對象都會有一個(gè)initialize方法,而在前面說過,構(gòu)造的時(shí)候會調(diào)用構(gòu)造函數(shù),構(gòu)造函數(shù)里面會讓initialize去調(diào)用apply方法,于是在new A(‘helloWord!')的時(shí)候initialize回去調(diào)用apply方法。這也就是調(diào)用了一個(gè)初始化的方法。

三、 call()和apply()
下面開始研究apply(),在網(wǎng)上找了幾個(gè)資料,并結(jié)合自己的研究,了解了call()和apply()的功能。功能基本一樣,function().call(object,{},{}……)或者function().apply (object,[……])的功能就是對象object調(diào)用這里的funciton(),不同之處是call參數(shù)從第二個(gè)開始都是傳遞給funciton的,可以依次羅列用“,”隔開。而apply只有兩個(gè)參數(shù),第二個(gè)是一個(gè)數(shù)組,其中存儲了所有傳遞給function的參數(shù)。
this.initialize.apply(this , arguments);
是什么意思?
這里的第一個(gè)this,是指用new調(diào)用構(gòu)造函數(shù)之后生成的對象,也就是前面的a,那么第二個(gè)this也當(dāng)然應(yīng)該是指同一個(gè)對象。那這句話就是this(也就是a)調(diào)用initialize方法,參數(shù)是arguments對象(參數(shù)的數(shù)組對象),所以在構(gòu)造函數(shù)執(zhí)行的時(shí)候,對象a就會去執(zhí)行initialize方法來初始化,這樣就和單詞“initialize”的意思對上了。
那么執(zhí)行initialize方法的參數(shù)怎么傳遞進(jìn)去的呢?

四、 Arguments對象
這段代碼能說明一切了:

代碼如下:
代碼如下:
function test(){
alert(typeof arguments);
for(var i=0; i alert(arguments[i]);
}
}
test("1","2","3");
test("a","b");

執(zhí)行后alert(typeof arguments);會顯示object,說明arguments是對象。然后會依次打出1、2、3。說明arguments就是調(diào)用函數(shù)的實(shí)參數(shù)組。

代碼如下:
代碼如下:
var Class = {
create: function() {
return function() {
this.initialize.apply(this , arguments);
}
}
}

arguments 就是create返回的構(gòu)造函數(shù)的實(shí)參數(shù)組,那么在
var a = new A(‘helloWord!');
的時(shí)候‘helloWord!'就是實(shí)參數(shù)組(雖然只有一個(gè)字符串),傳遞給方法apply,然后在調(diào)用initialize 的時(shí)候作為參數(shù)傳遞給初始化函數(shù)initialize。

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

javascript中的self和this用法小結(jié)_javascript技巧

javascript中的self和this用法小結(jié)_javascript技巧:一、 起因 那天用到prototype.js于是打開看看,才看幾行就滿頭霧水,原因是對js的面向?qū)ο蟛皇呛苁煜ぃ谑前俣?google了一把,最后終于算小有收獲,寫此紀(jì)念一下^_^。 prototype.js代碼片段 代碼如下:var Class = { create: functi
推薦度:
標(biāo)簽: js javascript 總結(jié)
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 久久国产一级毛片一区二区 | 一区二区三区欧美日韩 | 中文字幕一区二区三区四区 | 亚洲精国产一区二区三区 | 国产在线精品一区二区 | 亚洲欧美日韩成人 | 高清国产美女一级a毛片 | 日韩毛片免费观看 | 久久精品一区二区三区四区 | 91麻豆免费观看 | 日韩欧美大陆 | 91精品国产品国语在线不卡 | 在线日韩理论午夜中文电影 | 亚洲va欧美| 一区二区三区在线观看免费 | 亚洲综合欧美在线 | 国产精品一区二区三区免费 | 91免费高清无砖码区 | 国产一区二区在线看 | 国产全部视频在线播放 | 国内一级野外a一级毛片 | 国精产品一区 | 欧美一区二区精品 | 日韩综合第一页 | 国产一区二区精品久久91 | 日韩精品欧美亚洲高清有无 | 一区二区三区在线视频观看 | 在线观看视频国产 | 国产精品久久久久aaaa | 99久久综合国产精品免费 | 欧美精品观看 | 久久精品国产免费一区 | 国产91在线 | 日本 | 视频在线观看国产 | 久久亚洲伊人成综合人影院 | 在线观看网站国产 | 久久精品屋 | 成人精品视频一区二区在线 | 国产在线播放网站 | 亚洲第一页在线观看 | 91亚洲欧美综合高清在线 |