国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

舉例講解JavaScript中關于對象操作的相關知識

2019-11-20 11:15:42
字體:
來源:轉載
供稿:網友

從數組到對象

var myarr = ['red','blue','yellow','purple']; myarr;// ["red","blue","yellow","purple"] myarr[0];//"red" myarr[3];//"purple' 

 
數組大家都很熟悉吧,我們可以理解為一個Key對應一個Value,而這個Key在數組中,已經默認了(如上述代碼,它的key分別是0,1,2,3 value是red,blue,yellow,purple)。
那么一個對象就可以理解為一個自定義Key的數組??慈缦麓a

var hero ={  breed: 'Turtle',  occupation:'Ninja' }; 

 
 上述代碼我們可以了解到:
 1.對象的名稱叫hero.
 2.和數組不同的是用符號'{'替代了'['
 3.對象的屬性(如breed和occupation)用符號','分隔
 4.Key和Value的語法是 KEY:VALUE
還有需要注意到是不管屬性(也就是key)是放在雙引號,單引號,或者是沒有引號,他們的結果都是一樣的,下面的代碼是一樣的

var obj={a:1,b:2}; var obj={'a':1,'b':2}; var obj={"a":1,"b":2}; 

推薦的寫法是不要把屬性放在引號中。除非屬性的名稱是特殊符號,如數字,或者帶有空格等等。
 
本篇很簡單,要注意的是,定義數組的符號[] ,而定義對象的符號為{}
 
元素,屬性,方法
學習數組的時候,我們可以說數組里包含了元素,當談到對象的時候,我們可以改變下說法

var animal={    name: 'dog',    run:function(){     alert("running");   } } 

 name就是屬性(property),run本身是個函數,在這個對象中,我們叫方法(method)。

訪問對象的屬性
有兩種方式訪問對象的屬性。
用數組的形式如:animal['name']
用點的方式訪問:animal.name
第一種訪問方法適合任意情況。但是如果屬性是無效的命名的話,如上一節所說的屬性命名'1name'或者'my name'這種情況用點的方式訪問就是錯誤的。這一點要注意。
 
下面具體看一個對象訪問的例子

var book = {   name:'Javascript Fundation',   published:jixie.   author:{     firstname:'nicholas',     lastname:'xia'   } }; 

 
1.獲取author對象的firstname屬性

book.author.firstname //nicholas

 
2.獲取author對象的lastname屬性,我們嘗試用另一個寫法

book['author']['lastname'] //xia

我們也可以用混合的訪問方式
book.author['lastname']或者book['author'].lastname 這些方式都是有效的,要靈活去運用
 
在屬性是動態的情況下,一般用數組的訪問對象的方法。

var key ='lastname' book.author[key];//xia 

調用對象的方法

var hero = { breed: 'Turtle', occupation: 'Ninja', say: function() { return 'I am ' + hero.occupation; } } hero.say(); 

 
訪問對象的方法很簡單,有點就行,不過也可以用數組的方式,看起來比較詭異
如 hero['say']();
不推薦這種寫法,訪問對象的時候盡量用點的方式。
 
修改屬性和方法
因為Javascript是動態語言,所以在任何時候都可以修改對象的屬性和方法。看如下的例子

var hero={}; 

 hero是個空的對象。

typeof hero.breed;//undefined 

 說明了hero對象沒有breed的屬性
 接下來可以添加屬性和方法了

hero.breed = 'turtle'; hero.name = 'Leonardo'; hero.sayName = function() {return hero.name;}; 

 調用方法

 hero.sayName();//Leonardo

 刪除屬性
 

delete hero.name;//true hero.sayName();//方法失敗 

This

var hero = {   name : 'Rafaelo',   sayName : function(){    return this.name;    } } hero.sayName();//Rafaelo 

 this的意思就是這個對象的意思,關于this的復雜問題以后在討論。
 
構造函數(Constructor Functions)
另一種創建對象的方式是用構造函數,直接看例子

function Hero(){  this.name ='Refaelo'; } var hero = new Hero();hero.name;//Refaelo

這種方式的好處在于創建個對象的時候可以傳入參數

function Hero(name){   this.name = name;   this.whoAreYou = function(){     return this.name;   } }  var hi = new Hero('nicholas'); hi.whoAreYou();//nicholas 

 要注意的時候,不要丟點 new 操作符。。。
全局對象
上幾節我們說過全局變量的事情,已經說過了我們要盡量避免使用全局變量,當我們學過對象的時候,我們在看看全局變量究竟怎么回事,其實全局變量就是全局對象一個屬性了。如果主機的環境是web瀏覽器,全局變量就是window。
如果我們定義 var a = 1;
我們可以這么理解:
一個全局變量a,
做為window的一個屬性a.我們可以這么調用window.a或者window['a']
再看看預定義函數的parseInt('123 m');我們可以寫為window.parseInt('123 m');
 
constructor 屬性
對象建立之后,后臺有創建了個隱藏屬性,constructor.

h2.constructor;//Hero(name)

因為constructor的屬性是對函數的引用。如果你不關心h2對象是由什么創建的,而只關心創建一個新的對象和h2相似就用如下寫法

var h3 = h2.constructor('Nicholas'); h3.name ;//Nicholas 

我們來看看如下寫法的意思

var o = {}; o.constructor;//Object() typeof o.constructor;//"functions" 

其實就是隱藏了 new Object() ,更深的層次應用以后幾個教程在說明。
 
instanceof 操作符
用instanceof來判斷對象是否是指定的構造函數創建的。

function Hero(){ } var h = new Hero(); var o = {}; h instanceof Hero;//true h instanceof Object;//false o instanceof Object;//true 

 
 要注意的是instanceof 后面的是個引用 不是個函數 如錯誤寫法 h instanceof Hero();//錯誤

函數返回對象
可以用構造函數來創建個對象,也可以通過普通函數返回對象來創建對象

function factory(name){   return {    name:name  }; } 

用這個方法創建對象

var o = factory('one'); o.name

 
讓我們接下來看看比較少見的構造函數返回對象的例子

function C(){  this.a = 1;  return {b:2}; }  var c2 = new C(); typeof c2.a //undefined c2.b; // 2 

 說明了 并不返回this了 而是返回了對象{b:2}。。這點要注意
 
傳遞對象
如果傳遞一個對象到函數里,那么傳遞的是個引用。如果改變了這個引用,也就會改變原始的對象。
下面是個對象賦值的例子

var original = {name:'nicholas'}; var copy =original; copy.name;//'nicholas'; copy.name = 'Jason'; original.name;// 'Jason'; 

 
修改了copy的屬性name 也就等于修改了original的屬性name
對象傳參到函數中,也是同樣的。

function modify(o){   o.name ='Jason' } var original={name:'nicholas'}; modify(original); original.name;//Jason 

 
對象的比較
兩個對象的比較如果是true的話,那么他們就是同一個對象的引用。

var fido ={breed:'dog'}; var benji ={breed:'dog'};  benji===fido; //false; benji==fido; //false; 

 
 以上的代碼都不是同一引用,所以都是false

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 雅安市| 周宁县| 社会| 武宁县| 清徐县| 江孜县| 贵定县| 锦州市| 富民县| 本溪市| 东山县| 沁阳市| 楚雄市| 西贡区| 北票市| 碌曲县| 独山县| 张家界市| 资源县| 舞钢市| 伊金霍洛旗| 年辖:市辖区| 张家口市| 饶平县| 本溪市| 曲靖市| 万山特区| 南宫市| 汉中市| 黄骅市| 海兴县| 顺昌县| 垫江县| 无棣县| 溆浦县| 抚州市| 姚安县| 苗栗县| 嘉禾县| 永德县| 阜康市|