对象(object)数据的值:堆内存
创建对象
- 字面量(赋值式) var obj = {}
- 内置构造函数 var obj = new Object();
添加 / 修改属性
- 对象.属性名 = 新值
- 特殊属性名:对象[“属性名”] = 属性值
– 除了数字和布尔类型 属性值都加引号
删除属性
- delete 对象.属性名
查找对象值
- 对象.属性名
for in 遍历对象
语法:
for (var key in obj){
obj[key] key --->对象的每个属性
}
in 运算符
- 通过该运算符可以检查对象是否具有该属性
- 有返回 true,没有返回 false
- 语法 “属性名” in 对象
Object.prototype.toString.call()
- 检测所有的数据类型,返回值为(object Type)
创建面向对象
-
字面量,内置构造函数
– 缺点:代码量大,不利于维护 -
工厂模式创建对象
– 缺点:不知道对象从哪里来 -
自定义构造函数(函数首字母大写)
– 必须通过new关键字调用
自定义构造函数
每个函数都有一个指向本身的 - prototype 原型对象
实例对象
- 构造函数通过new 调用得出来的变量
- 每个实例对象都有指向构造函数远行对象的属性
__proto__
原型对象
- 每个函数都有的对象 通过 构造函数.prototype 访问
方法的访问规则(原型链)
– 先在这个对象访问,如果没有就去原型上找(创建这个实例对象的构造函数),如果没有就去原型的原型对象找…直到找到object的原型对象(方法的顶层)
对象共有的属性方法,添加到原型对象中。
– 语法: 对象.prototype.属性名 = 属性/方法;
x instanceof obj - - ->x 是否是 obj 的实例
this指向
自定义构造函数的的执行过程:
【1】创建一个对象
【2】将构造函数中的this 指向这个对象
【3】执行构造函数中的代码
【4】默认情况会把这个对象当成 构造函数的返回值返回
自定义构造函数中的return也重要:
【1】不写return的时候,默认返回this
【2】写了return
1】return 后面的值为基本数据类型 ,返回值的值还是 this
2】return 后面的值为复杂的数据类型,那么你写什么就返回什么
普通函数中 return
【1】不写return ,返回 undefined
【2】写return 返回你写的东西 return 后面的东西
判断 实例 和 原型 对象有没有某个属性 “属性”in obj
判断 实例 有没有某个属性 obj.hasOwnProperty(“属性”)
判断 原型 有没有某个属性
!obj.hasOwnProperty(‘属性’) && (‘属性’ in obj)
Configurable:表示能否通过delete删除属性从而定义属性
Enumberable:表示是否能通过for-in循环返回属性 true | false
Writeable:表示能否修改属性的值 true | false
Value:包含这个属性的数据值
要修改属性的默认的特性,需要使用Object.defineProperty(),该方法接收三个参数:属性所在的对象,属性的名字和一个描述符对象,其中描述符对象的属性必须是:configurable,enumberable,writable和value,设置一个或多个值,即可修改