布爾類型經過new Boolean()建立時是對象函數
數字類型經過new Number()建立時是對象post
字符串類型經過new String()建立時是對象學習
Date、Math、Array、RegExp自己就是對象ui
函數用typeof檢測返回的是「function」,但其有屬性和方法,也像是對象(函數經過new Function()建立時是對象)this
Object是對象的對象spa
原始數據類型有 number、boolean、string、null、undefinedprototype
其中null也是對象類型code
typeof true //boolean
typeof 123 //number
typeof "str" //string
typeof undefined //undefined
typeof null //object
複製代碼
原始數據類型的number、boolean、string、undefined不是對象類型對象
function關鍵字建立的函數不是對象類型繼承
其他都是對象類型
var Person = {
name: "一燈",
age: 23,
task: function() {
console.log('寫代碼!')
}
}
複製代碼
var name = "一燈"
複製代碼
實際上,對象就是一個變量,變量便是一個容器,只不過對象這個容器能夠裝各類類型的數據,而普通變量只能裝某種類型的數據。
能夠把對象理解爲一個超級變量。
剛說到對象是一個容器,裏面裝的就是屬性和方法
方法:即對象裏面定義的函數,如上面的task函數
屬性:除了方法,其他的都是屬性,如上面的name屬性
經過字面量建立(最簡單的),即上面的那種
經過new Object()
var Person = new Object()
Person.name = "一燈"
Person.age = 23
Person.task = function() {
console.log('寫代碼!')
}
複製代碼
經過構造函數
經過Object.create()
var a = 10
var b = a
var b = 20
console.log(a) //a = 10,b的改變不會影響a
複製代碼
var Person = {
name: "一燈",
age: 23,
}
var a = Person
a.age = 24
console.log(Person.age) //Person.age = 24,受到了a的影響
複製代碼
//1
Person.age
//2
objectName["age"]
//3
var a = "age"
objectName[a]
複製代碼
var Person = {
name: "一燈",
age: 23,
tel: 123456
}
var str = ''
for (x in Person) {
str += Person[x]+" ";
}
console.log(str) //一燈 23 123456
複製代碼
var Person = {
name: "一燈",
age: 23
}
Person.tel = 123456
console.log(Person) //{ name: '一燈', age: 23, tel: 123456 }
複製代碼
var Person = {
name: "一燈",
age: 23
}
Person.age = 24
console.log(Person) //{ name: '一燈', age: 24 }
複製代碼
var Person = {
name: "一燈",
age: 23
}
delete Person.age
console.log(Person) //{ name: '一燈' }
複製代碼
- 屬性值和屬性自己都會被刪除,刪除後不可再使用,除非再次添加該屬性
- delete僅用於刪除對象屬性,對其餘無效
- 切記不要刪除對象中不存在的屬性,以避免程序崩潰
- delete不會刪除繼承的屬性
var person = {
name: "一燈",
age: 23,
show: function() {
console.log("Hello" + this.name)
}
}
person.show() //Hello一燈
複製代碼
person.info = function () {
return this.name + "-" + this.age
}
複製代碼
var person = {
name: "一燈",
age : 23,
get getName() {
return this.name;
}
}
console.log(person.getName) //一燈
複製代碼
var person = {
name: "一燈",
age : 23,
set setName(name) {
this.name = name;
}
}
person.setName = "111"
console.log(person.name) //111
複製代碼
//函數實現getter
var person = {
name: "一燈",
age : 23,
getName: function() {
return this.name;
}
}
//getter:console.log(person.getName),語法更簡潔
console.log(person.getName()) //一燈
//函數實現setter
var person = {
name: "一燈",
age : 23,
setName: function(name) {
this.name = name;
}
}
//setter:person.setName = "111",語法和操做屬性同樣
person.setName(111)
console.log(person.name) //111
複製代碼
對比發現: 訪問器屬性語法更簡潔,而且方法和屬性的操做一致
值得注意的一點:訪問器屬性對錯誤不那麼敏感
//setter
var person = {
name: "一燈",
age : 23,
set setName(name) {
this.name = name;
}
}
person.sdetName = "111" //setName拼錯,可是沒有報錯
console.log(person.name)
//函數
var person = {
name: "一燈",
age : 23,
setName: function(name) {
this.name = name;
}
}
person.sdetName(111) //setName拼錯,報錯了
console.log(person.name)
複製代碼
var person = {
name: "一燈",
age: 23
}
//getter
Object.defineProperty(person, "getName", {
get: function() {
return this.name
}
})
console.log(person.getName) //一燈
//setter
Object.defineProperty(person, "setName", {
set: function(name) {
return this.name = name
}
})
person.setName = 111
console.log(person.name) //111
複製代碼
JavaScript採用構造的函數建立對象是一種常見的方法,一般採用首字母大寫的駝峯法命名對象
而後經過new關鍵字建立對象實例
function Person(name, age) {
this.name = "一燈",
this.age = 23,
this.show = function() {
console.log(this.name + '-' +this.age)
}
}
var person = new Person('一燈', 23)
person.show() //一燈-23
複製代碼
//添加屬性
person.tel = 123456
//添加方法
person.task = function() {
console.log("寫代碼!")
}
複製代碼
function Person(name, age) {
this.name = "一燈",
this.age = 23,
this.tel = 123456, //新增的屬性
this.show = function() {
console.log(this.name + '-' +this.age)
},
this.task = function() { //添加的方法
console.log("寫代碼!")
}
}
複製代碼
js中全部對象都從原型中繼承屬性和方法,原型是很是重用的概念
上一章節說到,向構造函數中添加屬性或方法須要在構造函數中添加。還有一種方式是:經過原型
function Person(name, age) {
this.name = "一燈",
this.age = 23,
this.show = function() {
console.log(this.name + '-' +this.age)
}
}
Person.prototype.tel = 123456
Person.prototype.task = function() {
console.log("寫代碼!")
}
var person = new Person()
console.log(person.tel) //123456
person.task() //寫代碼!
複製代碼