11、对象
○ Object
§ 一组属性和方法的集合
§ 1、创建实例对象
□ a、对象字面量
® 每一次new一个新的对象,就在堆空间有一个新的空间
var obj = {
name:'lisi',
age:20
}
□ b、构造函数方式
var obj = new Object();
obj.name = 'lisi';
§ 2、访问属性
□ a、点操作符
var obj = {
name:'lisi',
age:20
}
obj.name = 'terry';
console.log(obj.name);
□ b、obj["key"]
® 1、变量
® 2、
◊ obj{
name-first:'lisi'
}
◊ obj.name-first //报错
◊ obj['name-first'] = 'lisi';
§ 3、删除属性
□ delete obj.name
§ 4、检测属性
□ in:
"name" in obj
◊ 继承属性或者私有属性
□ hasOwnProperty():
obj.hasOwnProperty('name');
私有属性:true
继承属性:false
§ 5、对象序列化
object——》json:
JSON.stringify(obj)
json属性名一定会加""
json——》object
JSON.parse(json);
var str = JSON.stringify(obj);
console.log(obj);
console.log(str);
str = JSON.parse(str);
console.log(obj);
console.log(str);
console.log(obj === str); //false
§ 6、方法
□ 每一个函数都会在堆区有两个空间
每一个对象都有一个构造者(constructor)
每一个函数都有一个原型对象(prototype)
□ 静态方法
® 声明在函数内部,只能函数本身调用的方法
◊ assign(obj1,obj2):将对象合并到第一个参数对象中
} Object.assign()
var obj1 = {
name : 'lisi'
}
var obj2 = {
name : 'tom',
age : 20
}
var result = Object.assign(obj1,obj2);
console.log(result); //Object { name: "tom", age: 20 }
console.log(obj1 === result); //true
console.log(obj2 === result); //false
◊ keys(obj):
获取所有属性名
◊ values(obj):
获取所有属性值
◊ defineProperty(obj, 'key', {} ):定义属性
对象 属性名 属性
a、{
value: 20
writable:true, //是否可修改
enumerable:true, //是否可遍历
configurable:false //是否可删除/配置
}
b、set/get方法
不能和第一种方式同时使用
{
set:function(){
//设置过程
this._age
}
get:function(){
//获取属性过程
return this._age;
}
}
□ 非静态方法
声明在函数的原型对象中,函数原型对象和实例对象均可调用
◊ constructor
◊ toString()
◊ valueOf()