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

首頁 > 編程 > JavaScript > 正文

JavaScript創建對象的寫法

2019-11-20 22:21:18
字體:
來源:轉載
供稿:網友

對象是什么
從JavaScript定義上講對象是無序屬性的集合,其屬性可以包含基本值、對象或函數。也就是說對象是一組沒有特定順序的屬性,每個屬性會映射到一個值上,是一組鍵值對,值可以是數據或對象。

最簡單的對象
JavaScript的一對花括號{}就可以定義一個對象,這樣的寫法實際上和調用Object的構造函數一樣

復制代碼 代碼如下:

var obj={};
var obj2=new Object();

這樣構建出來的對象僅僅包含一個指向Object的prototype的指針,可以使用一些valueOf、hasQwnProperty等方法,沒有多大實際作用,自定義對象嘛總要有一些自定義的屬性、方法神馬的。

復制代碼 代碼如下:

var obj={};
            obj.a=0;
            obj.fn=function(){
                alert(this);
            }

            var obj2={
                a:0,
                fn:function(){
                    alert(this);
                }
            }


可以在定義完對象后通過”.”為其添加屬性和方法,也可以使用字面量賦值方法在定義對象的時候為其添加屬性和方法,這樣創建的對象,其方法和屬性可以直接使用對象引用,類似于類的靜態變量和靜態函數,這樣創建對象有一個明顯缺陷――在定義大量對象的時候很費力,要一遍遍的寫幾乎是重復的代碼。

抽象一下
既然是重復代碼就可以抽象出來,用函數來做這些重復工作,在創建對象的時候調用一個專門創建對象的方法,對于不同的屬性值只需要傳入不同參數即可。

復制代碼 代碼如下:

function createObj(a,fn){
                var obj={};
                obj.a=a;
                obj.fn=fn;
                return obj;
            }

            var obj=createObj(2,function(){
                alert(this.a);
            });

這樣在創建大量對象的時候,就可以通過調用此方法來做一些重復工作了,這種方式也不完美,因為在很多時候需要判斷對象的類型,上面代碼創建出來的對象都是最原始的Object對象實例,只是拓展了一些屬性和方法。

有型一些

又是function登場的時候,JavaScript中function就是個對象,在創建對象的時候打可以拋開上面createObj方法,直接使用function作為對象,怎么實現復用呢,這就在于function作為對象的特殊性了。

1. function可以接受參數,可以根據參數來創建相同類型不同值的對象

2. function作為構造函數(通過new操作符調用)的時候會返回一個對象,在貧下中農版jQuery中提到過一些構造函數的基本知識,簡單復制一下

構造函數的返回值分為兩種情況,當function沒有return語句或者return回一個基本類型(bool,int,string,undefined,null)的時候,返回new 創建的一個匿名對象,該對象即為函數實例;如果function體內return一個引用類型對象(Array,Function,Object等)時,該對象會覆蓋new創建的匿名對象作為返回值。

3. 那么使用function怎么解決類型識別問題呢,每個function實例對象都會有一個constructor屬性(也不是“有”,而是可以對應),這個屬性就可以指示其構造是誰,也可以使用instanceof 操作符來做判斷對象是否為XXX的實例。

不能光說不練,上代碼

復制代碼 代碼如下:

function Person(name){
                this.name=name;
                this.fn=function(){
                    alert(this.name);
                }
            }

            var person1=new Person('Byron');

            console.log(person1.constructor==Person);//true
            console.log(person1 instanceof Person); //true

這樣就完美了吧,也不是!雖然構造函數可以是對象有型,但對象的每個實例中的方法都要重復一遍!

復制代碼 代碼如下:

function Person(name){
                this.name=name;
                this.fn=function(){
                    alert(this.name);
                }
            }

            var person1=new Person('Byron');
            var person2=new Person('Frank');

            console.log(person1.fn==person2.fn);//false

看看看,雖然兩個實例的fn一模一樣,但是卻不是一回事兒,這如果一個function對象有一千個方法,那么它的每個實例都要包含這些方法的copy,很讓內存無語啊。

不玩兒虛的了

究竟有沒有一種近乎完美的構造對象的方式,及不用做重復工作,又有型,對象通用方法又不必重復?其實可以發現使用function已經距離要求和接近了,只差那么一點兒――需要一個所有function對象的實例共享的容器,在這個容器內存發實例需要共享的屬性和方法,正好這個容器是現成的――prototype,不了解prototype的同學可以看看JavaScript prototype

復制代碼 代碼如下:

function Person(name){
                this.name=name;
            }

            Person.prototype.share=[];

            Person.prototype.printName=function(){
                alert(this.name);
            }

            var person1=new Person('Byron');
            var person2=new Person('Frank');

            console.log(person1.printName==person2.printName);//true

這樣每個Person的實例都有自己的屬性name,又有所有實例共享的屬性share和方法printName,基本問題都解決了,對于一般的對象處理就可以始終這個有型又有愛的創建對象模式了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产在线播放91| 日韩美女免费观看| 色七七影院综合| 欧美午夜激情视频| 国产精品久久久久99| 久久亚洲精品小早川怜子66| 国产精品欧美激情在线播放| 日本高清不卡的在线| 国产欧美精品久久久| 国产精品夫妻激情| 国产视频自拍一区| xvideos成人免费中文版| 欧美性精品220| 欧美激情第一页xxx| 欧美一级视频在线观看| 亚洲a∨日韩av高清在线观看| 美女久久久久久久久久久| 国产视频精品免费播放| 久久五月情影视| 亚洲va久久久噜噜噜久久天堂| 国产精品极品美女粉嫩高清在线| 91国内产香蕉| 国产福利视频一区二区| 久久6精品影院| 国产成人在线一区| 55夜色66夜色国产精品视频| 亚洲欧美国产日韩中文字幕| 亚洲欧洲国产伦综合| 不用播放器成人网| 国产精品无码专区在线观看| 日韩在线观看免费全| 91精品在线一区| 中文字幕在线亚洲| 国产精品高清网站| 国产99久久精品一区二区| 亚洲国产日韩欧美综合久久| 久久这里只有精品99| 欧美日韩亚洲一区二区| 日韩电影大片中文字幕| 欧美日韩日本国产| 日本乱人伦a精品| 日韩精品视频三区| 91久久综合亚洲鲁鲁五月天| 在线色欧美三级视频| 26uuu国产精品视频| 亚洲精品国产美女| 97人人做人人爱| 国产精品男人的天堂| 亚洲永久在线观看| 97视频在线看| 中国日韩欧美久久久久久久久| 91精品视频专区| 国产精品久久久久久久久久东京| 国产日韩视频在线观看| 国产成人啪精品视频免费网| 国产亚洲精品成人av久久ww| 91wwwcom在线观看| 富二代精品短视频| 尤物九九久久国产精品的分类| 国产午夜精品一区理论片飘花| 91精品国产91久久久久久吃药| 久久6精品影院| 中文字幕亚洲欧美一区二区三区| 日韩在线视频免费观看高清中文| 国产精品精品视频一区二区三区| 91国语精品自产拍在线观看性色| 亚洲色图激情小说| 精品久久久久久中文字幕一区奶水| 国产成人精品优优av| www.亚洲一二| 久久在线视频在线| 国产精品一区二区三| 国产69精品99久久久久久宅男| 精品亚洲va在线va天堂资源站| 国模视频一区二区| 欧美日本在线视频中文字字幕| 久久国产精品影视| 日韩av在线一区二区| 91精品综合久久久久久五月天| 久久韩国免费视频| 日韩网站免费观看| 亚洲成人久久一区| 亚洲成人黄色网址| 欧美成人中文字幕在线| 日韩美女在线看| 亚洲成**性毛茸茸| 久久久av网站| yw.139尤物在线精品视频| 日本精品久久中文字幕佐佐木| 一本大道久久加勒比香蕉| 欧美性猛交xxxx富婆| 色婷婷av一区二区三区久久| 亚洲性生活视频在线观看| 激情成人在线视频| 欧美亚洲另类激情另类| 欧美午夜性色大片在线观看| 日韩欧美一区二区三区| 国产精品直播网红| 欧洲亚洲免费视频| 欧美日韩美女在线观看| 久久国产精品影视| 亚洲码在线观看| 国模精品视频一区二区三区| 亚洲无亚洲人成网站77777| 国产亚洲欧美日韩一区二区| 97人洗澡人人免费公开视频碰碰碰| 91视频国产一区| 亚洲午夜精品久久久久久久久久久久| 在线观看欧美日韩国产| 亚洲精品v欧美精品v日韩精品| 日韩欧美亚洲一二三区| 欧美激情乱人伦| 九九视频直播综合网| 国产一区av在线| 97成人精品区在线播放| 韩国19禁主播vip福利视频| 中文字幕精品视频| 91免费在线视频网站| www.日韩视频| 精品中文字幕在线观看| 久久久久久久久91| 97在线观看视频国产| 欧美自拍视频在线观看| 欧美激情视频给我| 欧美成人免费小视频| 国产精品网站入口| 国产精品影院在线观看| 日韩中文在线中文网三级| 欧美精品videossex88| 国产91精品久久久久久| 日韩在线观看免费全集电视剧网站| 欧美视频一区二区三区…| 国产综合视频在线观看| 亚洲视频在线视频| 亚洲理论电影网| 久久男人的天堂| 国产日产亚洲精品| 精品露脸国产偷人在视频| 精品欧美一区二区三区| 久久久久久久成人| 色老头一区二区三区| 97视频在线看| 成人激情视频在线| 亚洲国产成人一区| 亚洲精品电影在线观看| 色与欲影视天天看综合网| 成人av.网址在线网站| 亚洲第一区第一页| 中文一区二区视频| 欧美伦理91i| 亚洲免费电影一区| 免费91在线视频| 久久久亚洲影院你懂的| 国产精品嫩草影院久久久| 亚洲激情视频网| 中文日韩在线观看| 91亚洲精品久久久久久久久久久久| 亚洲色图25p| 91色精品视频在线| 欧美一级大片视频| 欧美综合一区第一页| 成人免费观看网址| 色噜噜狠狠色综合网图区| 精品一区二区三区四区|