布尔类型经过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() //写代码!
复制代码