var userInfo1 = new Object();
userInfo1.Name = 'Lyndon';
userInfo1.Age = 30;
- 使用 Object Literal Notation 語法
- CASE 1:
- 大括號「{」開始,接著是屬性名稱
- 冒號「:」,之後是屬性值
- 兩屬性之間使用「,」做區隔
var UserInfo2 = {
'Name': 'Lyndon',
'Age': 30
}
- 令外可利用 Object Literal Notation 語法建立包含預設屬性的物件,使用句點「‧」為物件新增屬性
var UserInfo2 = {}
UserInfo2.Name = 'Lyndon';
UserInfo2.Age = 30;
- Result:如上列呈現結果
- 因此可使用「‧」存取屬性
- 令外可使用「[]」存取屬性
- 屬性名稱不是簡單的識別項
- 屬性名稱在直行階段才能得知 (因此不推建此使用方法)
- JavaScript Reference Type (參考型別)
- Mothed (方法)
- Mothed (方法)就是 function (函式)
var UserInfo = {
Name: 'Lyndon',
Age: 30,
getAge: function(){
return this.Age;
}
}
- Property:Data Property (資料屬性)
var UserInfo = {}
Object.defineProperties(UserInfo, {
'Name':{
// 1. 是否可使用 delete 語法刪除
// 2. 變更屬性 attribute
// 3. 將資料屬性變更為 Accessor Property (存取子屬性)
configurable: false,
// 指明屬性是否可以搭配 for .. in 語法使用
enumerable: false,
// 屬性值是否可以變更
writable: false,
// 屬性值
value: 'Lyndon'
},
'Age':{
configurable: true,
enumerable: true,
writable: true,
value: 30
}
});
- Property:Accessor Property(存取子屬性)
- 需先理解 Data Property 與 Encapsulation,下方詳細描述
- Encapsulation (封裝)
- 使用 closures 來達到封裝
- 原則
- 建構函式宣告變數時,不要使用 this 關鍵字
- 使用 this 來宣告方法,以讀/寫屬性值
var UserInfo = function(Name, Age){
// 區域變數
var _Name = '';
var _Age = 0;
// 方法
this.getName = function(){
return _Name;
}
this.setName = function(Name){
_Name = Name;
}
this.getAge = function(){
return _Age;
}
this.setAge = function(Age){
if(0 < Age && Age < 100 )
_Age = Age;
}
// 使用方法
this.setName(Name);
this.setAge(Age);
}
var UserInfo1 = new UserInfo('Lyndon', 30);
- Property:Accessor Property(存取子屬性)
- 存取物件的資料屬性值,達到 Encapsulation (封裝),定義存取屬性時包含
- get:function (函式),讀取資料屬性
- set:function (函式),修改資料屬性
var UserInfo = function(Name, Age) {
// 區域變數
var _Name = '';
var _Age = 0;
// Object.defineProperties 定義資料屬性
Object.defineProperties(this, {
'Name': {
get: function() {
return this._Name;
},
set: function(Name) {
this._Name = Name;
}
},
'Age': {
get: function() {
return this._Age;
},
set: function(Age) {
if (0 < Age && Age < 100)
this._Age = Age;
}
}
});
// 使用 Accessor Property
this.Name = Name;
this.Age = Age;
};
var UserInfo1 = new UserInfo('Lyndon', 30);
沒有留言:
張貼留言