gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

什么是構造函數?詳解JavaScript中的構造函數

作為原型和原型鏈的基礎,先了解清楚構造函數以及它的執行過程才能更好地幫助我們學習原型和原型鏈的知識。本篇文章帶大家詳細了解一下JavaScript中的構造函數,介紹一下怎么利用構造函數創建一個js對象,希望對大家有所幫助!

什么是構造函數?詳解JavaScript中的構造函數

1、什么是構造函數?

一個普通的函數被用于創建一個類對象時,它就被稱作構造函數,或者構造器。(為方便理解,你可以將JavaScript中構造器的創建理解為其他語言中的類的創建,目的就是利用它通過new來實列一個對象)

function Person(){ //... } //當做普通函數調用 var obj=Person();  //構造函數調用 	 var obj=new Person();

構造函數的特點:

  • 在書寫規范上,我們習慣將構造函數名稱的首字母大寫。

  • 通過new來創建一個對象。

  • 無需在內寫入return也會有返回值,而且返回的是一個對象。

利用構造函數創建一個js對象

  • 構造函數創建對象(方法寫在構造函數里,缺點:構造函數每執行一次, 就會創建一次方法。)

	  function Person(name,age,gender){             this.name=name;             this.age=age;             this.gender=gender;             // 方法寫在里面             this.sayName=function(){                  console.log(this.name);              }                 }                function Dog(name,age){               this.name=name;               this.age=age;           }                     var obj=new Person("張三",18,"男");           var obj1=new Person("李四",16,"男");                      var dog=new Dog("樂樂",2);           obj.sayName();           obj1.sayName();                      console.log(obj);           console.log(obj1);           console.log(dog);
  • 構造函數創建對象(方法寫在構造函數外,缺點: 方法為全局方法,污染全局。)

	   function Person(name,age,gender){             this.name=name;             this.age=age;             this.gender=gender;             this.sayName=fun;   //方法寫在外面           }     	 function fun(){             console.log(this.name);         }           function Dog(name,age){               this.name=name;               this.age=age;           }                      var obj=new Person("張三",18,"男");           var obj1=new Person("李四",16,"男");                      var dog=new Dog("樂樂",2);           obj.sayName();           obj1.sayName();                      console.log(obj);           console.log(obj1);           console.log(dog);
  • 構造函數創建對象改造(方法通過原型對象創建)

原型對象:prototype

我們所創建的每一個函數,解析器都會向函數中添加一個prototype屬性。

指向構造函數的原型對象,我們可以通過__proto__來訪問該屬性。

構造函數.prototype.xxx , xxx可以是變量,可以是方法。執行過程中會先去對象中找方法或者變量, 找不到就會去原型里尋找。

	  function Person(name,age,gender){             this.name=name;             this.age=age;             this.gender=gender;           }           function Dog(name,age){               this.name=name;               this.age=age;           }                    /*為person添加統一的方法, 到原型對象中*/         Person.prototype.sayName=function(){             console.log(this.name);         }           var obj=new Person("張三",18,"男");           var obj1=new Person("李四",16,"男");                      var dog=new Dog("樂樂",2);           obj.sayName();           obj1.sayName();                      console.log(obj);           console.log(obj1);           console.log(dog);

運行結果:

什么是構造函數?詳解JavaScript中的構造函數

2、為什么要使用構造函數?

學習每一個概念,不僅要知道它是什么,還要知道為什么,以及解決什么樣的問題。

舉個例子,我們要錄入一年級一班中每一位同學的個人信息,那么我們可以創建一些對象,比如:

var p1 = { name: 'zs', age: 6, gender: '男', hobby: 'basketball' }; var p2 = { name: 'ls', age: 6, gender: '女', hobby: 'dancing' }; var p3 = { name: 'ww', age: 6, gender: '女', hobby: 'singing' }; var p4 = { name: 'zl', age: 6, gender: '男', hobby: 'football' }; // ...

像上面這樣,我們可以把每一位同學的信息當做一個對象來處理。但是,我們會發現,我們重復地寫了很多無意義的代碼。比如 name、age、gender、hobby 。如果這個班上有60個學生,我們得重復寫60遍。

這個時候,構造函數的優勢就體現出來了。我們發現,雖然每位同學都有 name、gender、hobby這些屬性, 但它們都是不同的,那我們就把這些屬性當做構造函數的參數傳遞進去。而由于都是一年級的學生,age 基本都是6歲,所以我們就可以寫死,遇到特殊情況再單獨做處理即可。此時,我們就可以創建以下的函數:

function Person(name, gender, hobby) {     this.name = name;     this.gender = gender;     this.hobby = hobby;     this.age = 6; }

當創建上面的函數以后, 我們就可以通過 new 關鍵字調用,也就是通過構造函數來創建對象了。

var p1 = new Person('zs', '男', 'basketball'); var p2 = new Person('ls', '女', 'dancing'); var p3 = new Person('ww', '女', 'singing'); var p4 = new Person('zl', '男', 'football'); // ...

此時你會發現,創建對象會變得非常方便。所以,雖然封裝構造函數的過程會比較麻煩,但一旦封裝成功,我們再創建對象就會變得非常輕松,這也是我們為什么要使用構造函數的原因。

在使用對象字面量創建一系列同一類型的對象時,這些對象可能具有一些相似的特征(屬性)和行為(方法),此時會產生很多重復的代碼,而使用構造函數就可以實現代碼復用

3、構造函數的執行過程

先說一點基本概念。

function Animal(color) {  this.color = color; }

當一個函數創建好以后,我們并不知道它是不是構造函數,即使像上面的例子一樣,函數名為大寫,我們也不能確定。只有當一個函數以 new 關鍵字來調用的時候,我們才能說它是一個構造函數。就像下面這樣:

var dog = new Animal("black");

以下我們只討論構造函數的執行過程,也就是以 new 關鍵字來調用的情況。

我們還是以上面的 Person 為例。

function Person(name, gender, hobby) {  this.name = name;  this.gender = gender;  this.hobby = hobby;  this.age = 6; }  var p1 = new Person('zs', '男', 'basketball');

此時,構造函數會有以下幾個執行過程:

1)當以 new 關鍵字調用時,會創建一個新的內存空間,標記為 Animal 的實例。

2)函數體內部的 this 指向該內存

通過以上兩步,我們就可以得出這樣的結論。

var p2 = new Person('ls', '女', 'dancing');  // 創建一個新的內存 #f2 var p3 = new Person('ww', '女', 'singing');  // 創建一個新的內存 #f3

每當創建一個實例的時候,就會創建一個新的內存空間(#f2, #f3),創建 #f2 的時候,函數體內部的 this 指向 #f2, 創建 #f3 的時候,函數體內部的 this 指向 #f3。

3) 執行函數體內的代碼
通過上面的講解,你就可以知道,給 this 添加屬性,就相當于給實例添加屬性。

4)默認返回 this

由于函數體內部的this指向新創建的內存空間,默認返回 this ,就相當于默認返回了該內存空間,也就是上圖中的 #f1。此時,#f1的內存空間被變量p1所接受。也就是說 p1 這個變量,保存的內存地址就是 #f1,同時被標記為 Person 的實例。

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
九热视频在线观看| 69久久久久久| av 日韩 人妻 黑人 综合 无码| 黄色网页免费在线观看| 国产午夜福利在线播放| 精品少妇人妻av免费久久洗澡| www.日本三级| 男女猛烈激情xx00免费视频| 日韩网站在线免费观看| 成人免费性视频| 亚洲熟妇av日韩熟妇在线| 国产亚洲综合视频| 成熟老妇女视频| 亚洲精品手机在线观看| 中文字幕成人在线视频| 国内外成人激情免费视频| 无码熟妇人妻av在线电影| 黄色影院一级片| 99热手机在线| 免费的av在线| 国产精品免费成人| 亚洲天堂av一区二区三区| 国产人妻人伦精品| 91av俱乐部| 992tv快乐视频| 国产精品69页| 精品国产无码在线| 国内外成人激情视频| 国产精品拍拍拍| 99国产精品白浆在线观看免费| www.com毛片| 五月天婷婷在线观看视频| 成人免费aaa| aaaaaaaa毛片| 精品视频一区二区在线| 特色特色大片在线| 88av.com| 欧美极品欧美精品欧美| 欧美xxxxxbbbbb| www.超碰com| 国产视频九色蝌蚪| 黄色网络在线观看| 色国产在线视频| 国产精品一区二区免费在线观看| 天堂网在线免费观看| 97国产精东麻豆人妻电影| 强开小嫩苞一区二区三区网站 | 男人添女荫道口女人有什么感觉| 国产又大又黄又粗的视频| 岛国大片在线播放 | 乱熟女高潮一区二区在线| 亚洲色精品三区二区一区| 老子影院午夜伦不卡大全| 欧美日韩理论片| 天天操天天爽天天射| 精品中文字幕av| av免费观看国产| 日韩久久久久久久久久久久| 国产四区在线观看| 91欧美一区二区三区| 久久6免费视频| 爱豆国产剧免费观看大全剧苏畅| 男女曰b免费视频| 97超碰青青草| 天天摸天天碰天天添| www.国产区| 91最新在线观看| 亚洲成人天堂网| 亚洲欧美日韩综合网| 亚洲免费av一区| 中文字幕55页| 亚洲高潮无码久久| 成人免费在线网| 黄色动漫在线免费看| 国产天堂在线播放| 看欧美ab黄色大片视频免费| 国产精品无码av无码| 一区二区三区免费播放| 日本一二区免费| 一二三四中文字幕| heyzo亚洲| 日本女优爱爱视频| 欧美激情第四页| 久久av综合网| 在线观看av日韩| 国产又爽又黄ai换脸| 成人免费在线网| 日韩精品免费播放| 久久久精品视频国产| 男人日女人视频网站| 任你操这里只有精品| 国产999免费视频| 久久综合色视频| 久久人人爽人人片| 免费av观看网址| 99久久99精品| 午夜精品久久久内射近拍高清| 色呦色呦色精品| av免费观看大全| 亚洲第一色av| 少妇高潮喷水久久久久久久久久| 色一情一区二区三区| 男人的天堂狠狠干| www.黄色网址.com| 亚洲一级片免费| 男人操女人逼免费视频| 国产又粗又爽又黄的视频 | 小说区视频区图片区| 国产一级不卡毛片| 91免费版看片| 国产三级精品三级在线| 久久国产色av免费观看| 亚洲爆乳无码精品aaa片蜜桃| 在线免费视频a| 黑鬼大战白妞高潮喷白浆| 国产激情片在线观看| 午夜大片在线观看| 五月婷婷丁香综合网| 国产av麻豆mag剧集| 久久免费一级片| 黄频视频在线观看| 亚洲综合欧美激情| 在线观看免费黄网站| 国产欧美高清在线| 大肉大捧一进一出好爽动态图| 免费网站在线观看视频| 国产91在线亚洲| av在线免费观看国产| 日韩精品久久一区二区| 天天综合中文字幕| 一级一片免费播放| 国产福利片一区二区| 色www免费视频| www.日本久久| 久久久久久久久影视| 国产乱子伦精品无码专区| 黄色一级片av| 日本在线xxx| 激情综合网俺也去| 日本激情视频在线播放| 尤物国产在线观看| 日本丰满少妇黄大片在线观看| 日本丰满大乳奶| 日韩精品在线观看av| 国产超级av在线| www.日本一区| 91免费版看片| 亚洲中文字幕无码专区| 日本新janpanese乱熟| 最新av免费在线观看| 特级西西444| 青青视频在线播放| wwwwwxxxx日本| 欧美交换配乱吟粗大25p| 777精品久无码人妻蜜桃| 爱情岛论坛成人| 日韩精品手机在线观看| 无码人妻精品一区二区三区在线| 欧美一级特黄a| 91亚洲精品国产| 激情视频免费网站| 日韩欧美猛交xxxxx无码| 日韩亚洲在线视频| 欧洲精品视频在线| 99久久激情视频| 91免费版看片| 天天视频天天爽| www.射射射| 91蝌蚪视频在线| 国产v亚洲v天堂无码久久久 | 激情综合在线观看| 日韩精品在线播放视频| 欧美成人xxxxx| 久久人人爽人人爽人人av| 午夜激情在线观看视频| 人人妻人人添人人爽欧美一区| 亚洲天堂一区二区在线观看| 国产女女做受ⅹxx高潮| 97在线免费视频观看| 在线黄色免费看| 少妇一级淫免费放| 久久国产亚洲精品无码| 成人午夜免费剧场| 成人性生交视频免费观看| 精品久久久久久久无码| 日韩中文字幕三区| 被灌满精子的波多野结衣| 成年人三级视频| 国产树林野战在线播放| youjizz.com亚洲| 黄色aaaaaa| www.成人黄色| 伊人国产在线视频| jizz大全欧美jizzcom| 在线观看av日韩| 视色视频在线观看| 孩娇小videos精品| 中文av字幕在线观看| 在线观看免费的av| 国产福利精品一区二区三区|