簡述:
JavaScript 并沒有強制一個類的概念, 可以把對象理解成一個屬性的集合, 對象的屬性和方法是可以動態(tài)進行增刪的.
1.對象
1.1對象的屬性
屬性是由鍵值對組成的, 屬性key是一個字符串, 屬性value 可以是任意 Javascript類型
var jack = new Object();
jack.name = "jack";
jack.age = 16;
jack.birthday = new Date(1990, 10, 10);
在獲取屬性的時候可以通過 (.) 也可以通過 ([]) 去訪問一個屬性. 但注意通過([])訪問的時候需要傳入字符串:
1.2屬性的作用域
在 JavaScript 初始化的時候會創(chuàng)建一個全局對象, 即 window.
var globalData = "username"
function func(id){
var element = document.getElementById(id);
return element;
}
以上代碼塊與下方代碼塊的作用完全相同
window.globalData = "username"
window.func = function(id){
var element = document.getElementById(id);
return element;
}
注意: 全局變量即可以理解為全局對象window的屬性
1.3 prototype原型
JavaScript 中對象的繼承關系是依據原型來實現的. 每個對象都會有一個 prototype 的屬性, 這個 prototype 本身就是一個對象,因此 prototype 屬性對應的對象也有自己的 prototype 對象.
JavaScript訪問屬性的規(guī)則:
訪問一個屬性的時候, 解析器需要從下向上遍歷這個鏈結構, 直到遇到該屬性, 則返回這個值, 如果遇到 prototype 為null, 則判定這個對象沒有這個屬性, 則返回 undefined.
屬性與繼承關系示例:
//基類
function Base(name){
this.name = name;
this.getName = function(){
return this.name;
}
}
//子類
function SubClass(id){
this.id = id;
this.getId = function(){
return this.id;
}
}
//指定Base 和 SubClass的繼承關系
SubClass.prototype = new Base("base");
代碼執(zhí)行結果:
通過對 SubClass 指定 prototype,則 創(chuàng)建的 SubClass 的對象的 proto 屬性對應于 prototype 對象.
注意: 通過function來創(chuàng)建的對象, 默認 prototype 為 Object
1.4 this 指針
在 JavaScript 中, this 表示當前上下文(content), 即是對當前調用則的引用, 而非當前對象本身.
var name = "global"; //全局對象對應的屬性
//定義全局的函數對象
window.printName = function(){
return this.name;
}
var tom = {
name : "tom"
}
var jerry = {
name : "jerry"
}
//打印執(zhí)行結果
printName.call(tom);
printName.call(jerry);
printName();
執(zhí)行結果:
2. 對象的創(chuàng)建
創(chuàng)建Js 的對象有三種方式:
- 通過 new 操作符作用于 Object 對象, 構造一個新的對象, 然后動態(tài)地添加屬性,
- 定義一個 構造函數 , 然后使用 new 進行對象的創(chuàng)建.
- 使用對象字面量, 創(chuàng)建一個對象.
使用對象字面量創(chuàng)建對象:
var object = {
name : "devin",
age : 26
};
Json 可以直接轉成 Js 對象