JavaScript對象基礎(chǔ)

對象是什么

對象是一個(gè)包含相關(guān)數(shù)據(jù)和方法的集合,通常由一些變量和函數(shù)組成,我們稱之為對象里面的屬性和方法。

面向?qū)ο蟮木幊炭梢岳斫鉃椋?strong>把一切看做成東西,這個(gè)東西有他自己的屬性和功能。

怎么創(chuàng)建對象

常見的創(chuàng)建方法有以下幾種。

1.Object構(gòu)造函數(shù)創(chuàng)建
var obj = new Object();
obj.member1Name = member1Value;
obj.member2Name = member2Value;
obj.member3Name = member3Value;
//用Object引用類型創(chuàng)建一個(gè)新實(shí)例,然后保存在obj中
2.對象字面量表示法
var obj= {
  member1Name : member1Value,
  member2Name : member2Value,
  member3Name : member3Value
}
3.用構(gòu)造函數(shù)創(chuàng)建對象
function obj(arguments) {
  this.member1Name = member1Value;
  this.member2Name = member2Value;
  this.member3Name = member3Value;
}
4.工廠模式創(chuàng)建
function myfun(arguments) {
  var obj = new Object();
  obj.member1Name = member1Value;
  obj.member2Name = member2Value;
  obj.member3Name = member3Value;
  return obj;
}
var obj1 = myfun(arguments);

怎么訪問對象

  • 點(diǎn)表示法
    當(dāng)你想訪問對象里面的屬性的時(shí)候,將對象的名字后面加上一個(gè)點(diǎn),后面加上你要訪問的屬性名稱。如下所示:
obj.member1Name
obj.member1Name[1]
obj.member1Name()
  • 括號(hào)表示法
    另外一種是用括號(hào)將屬性括起來,按層級(jí)關(guān)系依次排列在對象的后面(注意要用引號(hào)包裹起來哦)。如下所示:
obj[“member1Name”]
obj[”member1Name”][”submember1Name”]
  • 括號(hào)表示法的優(yōu)點(diǎn)
    1.在程序運(yùn)行時(shí)創(chuàng)建和修改屬性。
obj = {};
for (var i = 0; i < 4; i++) {
  obj["name"+i] = i;
}
console.log(obj); //=>
{name0: 0, name1: 1, name2: 2, name3: 3}

????2.可以通過變量來進(jìn)行訪問。

var propertyName = 'member1Name';
console.log(obj[member1Name]);  

對象中的this

this可以理解為一個(gè)指針,它的指向在函數(shù)定義的時(shí)候是確定不了的,只有函數(shù)執(zhí)行的時(shí)候才能確定this到底指向誰。

實(shí)際上this的最終指向的是那個(gè)調(diào)用它的對象,更精確的說,this永遠(yuǎn)指向的是最后調(diào)用它的對象。

接下來我們從三種調(diào)用方式分別來闡述this在該情況下的指向。
1.作為對象來調(diào)用:this被綁定到該對象

var point = {
x : 0,
y : 0,
moveTo : function(x, y) {
    this.x = this.x + x;
    this.y = this.y + y;
    }
};
point.moveTo(1, 1)//this 綁定到當(dāng)前對象,即 point 對象

2.作為函數(shù)來調(diào)用:函數(shù)被直接調(diào)用綁定到全局對象

function makeNoSense(x) {
this.x = x;
}
makeNoSense(5); //=>這里等效為 window.makeNoSense(5);
x;// x 已經(jīng)成為一個(gè)值為 5 的全局變量

對于內(nèi)部函數(shù),即聲明在另外一個(gè)個(gè)函數(shù)體內(nèi)的函數(shù),也會(huì)綁定到全局。

var point = {
x : 0,
y : 0,
moveTo : function(x, y) {
    // 內(nèi)部函數(shù)
   var moveX = function(x) {
   this.x = x;//this綁定到了全局
   };
   // 內(nèi)部函數(shù)
   var moveY = function(y) {
   this.y = y;//this 綁定到了全局
   console.log(this); //=>window
   };
   console.log(this);
   moveX(x);
   moveY(y);
   }
};
point.moveTo(1, 1);
point.x; //==>0
point.y; //==>0
x; //==>1
y; //==>1

如果我們其實(shí)是想把point里面的x,y改變,可以這么做:

var point = {
x : 0,
y : 0,
moveTo : function(x, y) {
     var that = this; //=>用變量把this保存起來
    // 內(nèi)部函數(shù)
    var moveX = function(x) {
    that.x = x;
    };
    // 內(nèi)部函數(shù)
    var moveY = function(y) {
    that.y = y;
    }
    moveX(x);
    moveY(y);
    }
};
point.moveTo(1, 1);
point.x; //==>1
point.y; //==>1

3.作為構(gòu)造函數(shù)調(diào)用: 構(gòu)造函數(shù)中的this指向新創(chuàng)建的對象本身

function showName() {
 this.name = "showName function"; 
} 
var obj = new showName(); 
console.log(obj.name); //showName function

上述代碼中,我們通過new關(guān)鍵字創(chuàng)建一個(gè)對象的實(shí)例,new關(guān)鍵字可以改變this的指向,將這個(gè)this指向?qū)ο髈bj。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容