方法名后: 调用方法,立即执行,就加()
将方法作为对象传递,不加()
闭包:函数使用了*不属于自己*的*局部变量*!
闭包的问题:1. 普通方法调用完,活动对象回收!
闭包方法导致父方法活动对象不释放
闭包方法占用更多内存空间
重新获得闭包,闭包内的局部变量都重置
2. 闭包中多个方法,访问的是同一个局部变量!
只要变量变化,所有方法都受影响!
对象:自定义对象!
面向过程:以任务的实行步骤为编程顺序。
方法:封装并重用复杂任务的方式
问题:功能和功能操作的数据,分离!
面向对象:在设计过程中,一切以描述一个对象为基本原则
什么对象:封装现实中一个事物的属性和功能的结构
对象中包含:属性和功能(方法)!
js中的对象:其实就是关联数组!
创建自定义对象:3种
直接量:var obj={属性名:属性值,...}
访问属性?obj.属性名
可能不存在的属性,使用之前,必须先判断存在,再使用:
判断任意对象是否包含属性:
if(obj.hasOwnProperty("属性名"))
如果包含返回true,否则返回false
判断内置对象,浏览器对象兼容性:
if(obj.属性名)-->undefined,null,0,"",NaN都是false
其余都是true
自定义对象创建的依据?需求中的名词!
需求中的动词:对象的功能/方法
对象的属性?表,证,单,据
对象中的方法:对象中的功能。
如何定义:var obj={
方法名:function(){方法体}
}
方法其实就是一个对象!
对象中的方法本质上就是一个特殊的属性!
对象中的方法是操作数据的功能
对象自己的方法,如何访问自己的属性:this指代当前对象
什么是this? 栈中一个指针,永远指向当前正在操作的对象!
面向对象三大特点:封装,继承,多态
封装?将数据和对数据的操作,包装为一个整体,过程就叫封装。
继承:使用现有类型,创建出新的类型。新类型中可以使用现有类型的属性和功能!并且新类型可以扩展出现有类型没有的属性和功能!
所有对象的父类型,Object:toString()
hasOwnProperty()
对象模板/构造函数:专门用来反复创建相同结构的对象的专门方法
如何定义构造函数:function 类型名(属性值参数...){
this.属性名=属性值;
this.方法名=function(){
方法体;
}
}
new构造函数():
new:开空间
构造函数:划分空间结构;初始化内部属性的值
重写:如果子类型认为父类型的方法不好用!可以重新定义和父类型完全同名的方法!实现覆盖!
默认toString方法如果无法打印内容,默认打印的是对象类型
一般自定义类型对象,都会重写toString方法!
原型prototype:构造函数背后,专门保存由构造函数创建出的对象共有的数据。
自有属性:只给一个对象定义的属性,仅属于当前对象。
其他对象不能共享。
共有属性:保存在原型中,由所有同类型对象共享的属性
设置/读取:构造函数.prototype.共有属性名
删除属性定义:delete 对象[.prototype].属性名;
hasOwnProperty:仅检测当前对象的自有属性!
属性 in 对象:不但检测当前对象的自有属性,而且同时检测当前对象原型的共有属性!