javascript面向對象之建立對象

對象定義

對象定義:無序屬性的集合,其屬性能夠包含基本值、對象或函數
對象就是 鍵值對 其中值能夠是數據和函數
對象方法就是對象的屬性 不過這個屬性是函數函數

var p = new Object()

p.name = 'nike'
p.age = '10'
p.job = 'joker'

p.sayName = function() {
  console.log(this.name)
}
console.log(p.age)//10
p.sayName()       //nike
var p = {
  name: 'nike',
  age: '10',
  job: 'joker',
  sayName: function(){
    console.log(this.name)
  }
}

console.log(p.job)//joker
p.sayName()       //nike

屬性類型

數據屬性

Configurable:表示可否經過 delete 刪除屬性從而從新定義屬性,可否修改屬性的特
性,或者可否把屬性修改成訪問器屬性。像前面例子中那樣直接在對象上定義的屬性,它們的這個特性默認值爲 true。
Enumerable:表示可否經過 for-in 循環返回屬性。像前面例子中那樣直接在對象上定
義的屬性,它們的這個特性默認值爲 true。
Writable:表示可否修改屬性的值。像前面例子中那樣直接在對象上定義的屬性,它們的
這個特性默認值爲 true。
Value:包含這個屬性的數據值。讀取屬性值的時候,從這個位置讀;寫入屬性值的時候,把新值保存在這個位置。這個特性的默認值爲 undefined。
修改這 3 個值須要用 es5 的Object.defineProperty()方法this

這個方法接收 3 個參數:屬性所在的對象、屬性的名字、描述符對象es5

描述符對象的屬性必須是:configurable enumerable writeble valuecode

var person = {}
Object.defineProperty(person, 'name', {
  writable: true,
  value: 'nike' 
})
console.log(person.name)//nike
person.name = 'gray'
console.log(person.name)//gray
var person = {}
Object.defineProperty(person, 'name', {
  configurable: true,
  value: 'nike'
})
console.log(person.name)//nike
delete person.name
console.log(person.name)//undefined

訪問器屬性

Configurable:表示可否經過 delete 刪除屬性從而從新定義屬性,可否修改屬性的特性,或者可否把屬性修改成數據屬性。對於直接在對象上定義的屬性,這個特性的默認值爲true
Enumerable:表示可否經過 for-in 循環返回屬性。對於直接在對象上定義的屬性,這個特性的默認值爲 true。
Get:在讀取屬性時調用的函數。默認值爲 undefined。
Set:在寫入屬性時調用的函數。默認值爲 undefined對象

var person = {
  oldname: 'jac',
  age: '10'
}

Object.defineProperty(person, 'newname', {
  get: function(){
    return this.oldname
  },
  set: function(value){
    this.oldname = value
  }
})

person.newname = 'bool'
console.log(person.oldname)//bool

//設置一個屬性的值會致使其餘屬性的變化
var person = {
  name: 'handsome'
}

Object.defineProperties(person, {
  boy: {
    get: function () {
      return this.name + ' hua'
    },
    set: function (value) {
      return this.name = value
    }
  },
  man: {
    get: function () {
      return this.name
    },
    set: function (value) {
      return this.name = value
    }
  },
  year: {
    value: 20
  }
})

console.log(person.boy)//handsome hua
console.log(person.man)//handsome
//若是person的name有值,就不要對name再設置 get set
var descriptor = Object.getOwnPropertyDescriptor(person, "year")
//屬性所在的對象、要讀取其描述符的屬性名稱
console.log(descriptor.value)//20
相關文章
相關標籤/搜索