亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

老生常談JavaScript面向對象基礎與this指向問題

2019-11-19 15:10:01
字體:
來源:轉載
供稿:網友

前 言

我們的程序語言經歷了從“面向機器”、到“面向過程”、再到“面向對象”的一個過程。而JavaScript是一門基于對象的一門語言,它介于面向過程與面向對象之間。在學習JavaScript的過程中,OOP是非常重要的一環,下面我們來一起探討一下JS中的面向對象吧!?。?/p>

1 、OOP的基礎問題

1.1什么是面向過程和面向對象?

面向過程:專注于如何去解決一個問題的過程步驟。編程特點是由一個個的函數去實現每一步的過程步驟,沒有類和對象的概念。

面向對象:專注于由哪一個對象來解決這個問題。編程特點是出現了一個個的類,從類中拿到這個對象,由這個對象去解決具體的問題。

對于調用者來說,面向過程需要調用者自己去實現各種函數。而面向對象,只需要告訴調用者對象中具體方法的功能,而不需要調用者了解方法中的實現細節。

1.2面向對象的三大特征

繼承、封裝、多態

1.3類和對象的關系

① 類:一類具有相同特征(屬性)和行為(方法)的集合。

比如:人類-->屬性:身高、體重、性別 方法:吃飯、說話、走路

② 對象:從類中,拿出具有確定屬性值和方法的個體。

比如:張三-->屬性:身高180、體重180 方法:說話-->我叫張三,身高180

③ 類和對象的關系

類是抽象的,對象是具體的(類是對象的抽象化,對象是類的具體化)

解釋一下:

類是一個抽象的概念,只能說類有屬性和方法,但是不能給屬性賦具體的值。比如說人類有姓名,但是不能說人類的姓名叫啥。。。

對象是一個具體的個例,是將類中的屬性進行具體賦值而來的個體。比如說張三是人類的一個個體,可以說張三的姓名叫張三。也就是張三對人類的每一個屬性進行了具體的賦值,那么張三就是由人類產生的一個對象。

2、 JavaScript中的面向對象

2.1創建類和對象的步驟

①創建一個類(構造函數):類名必須使用大駝峰法則,即每個單詞的首字母必須大寫。

function 類名(屬性1){  this.屬性1 = 屬性1;  this.方法 = function(){   //方法中要調用自身屬性,必須要使用this.屬性  }}

②通過類,實例化(new)出一個對象。

var obj = new 類名(屬性1的具體值);

obj.屬性; 調用屬性

obj.方法(); 調用方法

③注意事項

>>>通過類名,new出一個對象的過程,叫做“類的實例化”

>>>類中的this,會在實例化的時候,指向新new出的對象。所以,this.屬性 this.方法,實際上是將屬性和方法綁定在即將new出的對象上面。

>>>在類中,要調用自身屬性,必須使用this.屬性名、如果直接使用變量名,則無法訪問對應的屬性。

>>>類名必須使用大駝峰法則,注意與普通函數的區別。

2.2兩個重要屬性constructor和instanceof

①constructor:返回當前對象的構造函數

>>>zhangsan.constructor = Person; √

②instanceof:檢測一個對象,是不是一個類的實例;

>>>lisi instanceof Person √ lisi是通過Person類new出的

>>>lisi instanceof Object √ 所有對象都是Object的實例

>>>Person instanceof Object √ 函數本身也是對象

3、 JavaScript中的this指向問題

在上一部分中,我們創建了一個類,并通過這個類new出了一個對象。 但是,這里面出現了大量的this。 很多同學就要懵逼了,this不是“這個”的意思嗎?為什么我在函數里面寫的this定義的屬性,最后到了函數new出的對象呢??

3.1誰最終調用函數,this就指向誰!

① this指向誰,不應該考慮函數在哪聲明,而應該考慮函數在哪調用??!

② this指向的,永遠只可能是對象,不可能是函數?。?/p>

③ this指向的對象,叫做函數的上下文context,也叫函數的調用者。

3.2this指向的規律(與函數的調用方式息息相關!)

① 通過函數名()調用的,this永遠指向window

func(); // this--->window//【解釋】 我們直接用一個函數名()調用,函數里面的this,永遠指向window。

② 通過對象.方法調用的,this指向這個對象

// 狹義對象 var obj = {  name:"obj",  func1 :func }; obj.func1(); // this--->obj//【解釋】我們將func函數名,當做了obj這個對象的一個方法,然后使用對象名.方法名, 這時候函數里面的this指向這個obj對象。 // 廣義對象 document.getElementById("div").onclick = function(){  this.style.backgroundColor = "red";}; // this--->div//【解釋】對象打點調用還有一個情況,我們使用getElementById取到一個div控件,也是一種廣義的對象,用它打點調用函數,則函數中的this指向這個div對象。

③ 函數作為數組的一個元素,用數組下標調用,this指向這個數組

var arr = [func,1,2,3];arr[0](); // this--->arr//【解釋】這個,我們把函數名,當做數組中的一個元素。使用數組下標調用,則函數中的this將指向這個數組arr。

④ 函數作為window內置函數的回調函數使用,this指向window。比如setTimeout、setInterval等

setTimeout(func,1000);// this--->window//setInterval(func,1000);//【解釋】使用setTimeout、setInterval等window內置函數調用函數,則函數中的this指向window。

⑤ 函數作為構造函數,使用new關鍵字調用,this指向新new出的對象

var obj = new func(); //this--->new出的新obj//【解釋】這個就是第二部分我們使用構造函數new對象的語句,將函數用new關鍵字調用,則函數中的this指向新new出的對象。

3.3關于this問題的面試題

var fullname = 'John Doe';var obj = {  fullname: 'Colin Ihrig',  prop: {    fullname: 'Aurelio De Rosa',    getFullname: function() {      return this.fullname;    }  }};console.log(obj.prop.getFullname()); // 函數的最終調用者 obj.prop    var test = obj.prop.getFullname;console.log(test()); // 函數的最終調用者 test() this-> window   obj.func = obj.prop.getFullname;console.log(obj.func()); // 函數最終調用者是obj   var arr = [obj.prop.getFullname,1,2];arr.fullname = "JiangHao";console.log(arr[0]());// 函數最終調用者數組

好了,這篇博客,我們了解了什么是面向對象、類和對象的關系、JS中聲明類與對象的步驟,以及重點講解的this指向問題! 希望能夠幫助大家真正的理解了this的認知,下面我會繼續給大家分享關于面向對象方面的問題。多謝大家的支持?。?!

以上這篇老生常談JavaScript面向對象基礎與this指向問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲美腿欧美激情另类| 亚洲成人精品在线| 精品在线观看国产| 久久影视电视剧免费网站| 国产99视频精品免视看7| 国产精品视频26uuu| 久久精品色欧美aⅴ一区二区| 97视频在线免费观看| 日韩av在线免费观看| 视频在线观看99| 亚洲自拍偷拍色片视频| 国产精品你懂得| 国产一区二区视频在线观看| 午夜精品www| 亚洲人成77777在线观看网| 久久成人这里只有精品| 日韩精品一区二区三区第95| 精品高清一区二区三区| 日韩最新免费不卡| 红桃av永久久久| 亚洲美腿欧美激情另类| 中文字幕精品久久| 欧美日韩日本国产| 中日韩美女免费视频网址在线观看| 亚洲精品自拍第一页| 国产精品女人久久久久久| 欧美日韩福利视频| 狠狠操狠狠色综合网| 亚洲国产中文字幕在线观看| 国产成人精品综合久久久| 北条麻妃99精品青青久久| 国产成人综合av| 91chinesevideo永久地址| 欧美亚洲国产另类| 久久精品久久精品亚洲人| 欧美香蕉大胸在线视频观看| 68精品国产免费久久久久久婷婷| 国产成人久久精品| 日韩电影中文字幕在线观看| 尤物99国产成人精品视频| 久久久久久久影院| 日本一区二区三区四区视频| 久久精品色欧美aⅴ一区二区| 亚洲aⅴ日韩av电影在线观看| 欧美不卡视频一区发布| 欧美国产日韩一区二区三区| 91禁国产网站| 最近免费中文字幕视频2019| 国内精品视频在线| 亚洲精美色品网站| 亚洲精品在线看| 欧美风情在线观看| 欧美人与性动交a欧美精品| 91高潮精品免费porn| 亚洲国产中文字幕在线观看| 欧美成人精品在线观看| 欧洲美女免费图片一区| 精品国产乱码久久久久久婷婷| 欧美性jizz18性欧美| 久久精品视频在线观看| 欧美日韩国内自拍| 欧美精品在线第一页| 国内精品久久久| 亚洲电影免费在线观看| 91精品国产91久久久久久不卡| 亚洲黄色成人网| 欧美日韩免费在线| 亚洲bt欧美bt日本bt| 欧美日韩加勒比精品一区| 欧美第一黄网免费网站| 亚洲国产精品专区久久| 国产精品www| 亚洲一区二区日本| 欧美激情xxxx性bbbb| 国产精品十八以下禁看| www亚洲欧美| 一区二区在线视频| 中文字幕亚洲情99在线| 国产区精品视频| 亚洲桃花岛网站| 青草青草久热精品视频在线网站| 久久久成人的性感天堂| 日韩精品免费视频| 神马久久久久久| 亚洲精品成人久久| 欧美色道久久88综合亚洲精品| 日韩精品在线视频观看| 欧美一区二三区| 久久躁狠狠躁夜夜爽| www.欧美免费| 久久精品人人做人人爽| 91高清免费视频| 午夜精品在线视频| 亚洲人成在线免费观看| 国产精品夜色7777狼人| 国产精品亚洲视频在线观看| 日韩在线激情视频| 亚洲激情在线观看视频免费| 欧美精品性视频| 欧美激情手机在线视频| 中文字幕久久精品| 欧美亚洲国产日本| 欧洲午夜精品久久久| 亚洲欧美精品中文字幕在线| 国产一区二区三区视频| 国产精品高潮呻吟久久av黑人| 亚洲成av人片在线观看香蕉| 欧美黄色片在线观看| 国产成人精品免高潮在线观看| 日韩有码在线电影| 福利二区91精品bt7086| 亚洲天堂av在线免费| 久久最新资源网| 亚洲成av人影院在线观看| 国产一区二区丝袜高跟鞋图片| 国产精品久久久久秋霞鲁丝| 精品国产乱码久久久久久虫虫漫画| 亚洲另类xxxx| 日韩成人在线免费观看| 一本色道久久88综合日韩精品| 成人精品视频久久久久| 欧美激情极品视频| 欧美人与物videos| 欧美性受xxxx黑人猛交| 亚洲欧美日韩直播| 日韩高清a**址| 久久久久久久久爱| 91精品国产免费久久久久久| 欧美激情乱人伦一区| 亚洲色图在线观看| 日韩第一页在线| 国产精品日韩在线播放| 国产69久久精品成人| 欧美一性一乱一交一视频| 精品少妇v888av| 欧美极品欧美精品欧美视频| 国产在线久久久| 国产精品久久久一区| 国产精品久久77777| 色哟哟亚洲精品一区二区| 欧美日韩在线视频一区二区| 国产欧美精品一区二区三区介绍| 久久久久久亚洲精品不卡| 久久影院资源网| 国产日韩在线亚洲字幕中文| 久久久亚洲影院| 久久91亚洲精品中文字幕| 欧美在线视频免费| 国产一区红桃视频| 成人日韩在线电影| 日韩精品视频免费专区在线播放| 正在播放欧美视频| 日韩精品免费视频| 91在线视频免费| 91沈先生作品| 欧美亚洲激情视频| 97碰在线观看| 欧美精品久久久久a| 九九久久精品一区| 国产精品高精视频免费| 国产精品一区二区三区久久久| 亚洲精品视频免费在线观看| 亚洲人成绝费网站色www| 欧美午夜片在线免费观看|