什么是面向对象:
ECMAScript 有两种开发模式:1.函数式(过程化),2.面向对象(OOP)。面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象。 但是,ECMAScript 没有类的概念,因此它的对象也与基于类的语言中的对象有所不同。
面向对象编程(OOP)的特点:
封装:不考虑内部实现,只考虑功能使用
继承:从已有对象上,继承出新的对象
多态:同一个函数调用会有不同的执行效果
对象的组成
方法——函数:过程、动态的
属性——变量:状态、静态的
为对象添加方法和属性:
创建对象:var obj=new Object();
添加属性:obj.name=‘abc’;
添加方法:obj.show=function(){alert(this.name)}
注 :不能在系统对象中随意附加方法、属性,否则会覆盖已有方法、属性
构造函数:
构造函数与其他函数的唯一区别在于调用它们的方式,任何函数,只要通过new操作符来调用,就可作为构造函数;而任何函数,若不通过new操作符调用,就是普通函数。
什么是原型:
原型可以让所有对象实例共享它所包含的属性和方法
为Array添加sum方法:
给对象添加方法,类似于行间样式
给原型添加方法,类似于class
原型的小缺陷:
无法限制覆盖
用混合方式构造对象:
混合的的构造函数/原型方式
Mixed Constructor Function/Prototype Method
原则:
构造函数:加属性
原型:加方法
对象命名规范:
类名首字母大写
构造函数伪装 call()方法:
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
语法: Function.call(obj,arg1,arg2,…)方法能接收多个参数
obj:这个对象将代替Function类里this对象
arg:这个是参数,它将作为参数传给Function
如果没有提供 arg和 obj任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
构造函数伪装 apply()
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
语法: Function.apply(obj,args)方法能接收两个参数
obj:这个对象将代替Function类里this对象
args:这个是数组,它将作为参数传给Function(args-->arguments)
如果没有提供 args 和 obj任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
ECMAScript只支持实现继承,且其实现继承主要依靠原型链来实现
原型链:
原型链的基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法
instanceof操作符:
是一个运算符,运算中需要两个操作数,运算的结果是true或false,表示此值是不是某一个类的示例,能得到一个值的具体类型。
什么是闭包?
函数 嵌套函数,内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾回收机制所收回
闭包有什么好处?应用在那里?
好处:
1.希望一个变量长期驻扎在内存当中
2.避免全局变量的污染
3.私有成员的存在
应用:
1.模块化代码
2.在循环中直接找到对应元素的索引
闭包需要注意得地方?
IE下会引发内存泄漏
本地对象(非静态对象):
常用对象
Object、Function、Array、String、Boolean、Number、Date、RegExp、Error
内置对象(静态对象):
Global、Math
宿主对象(由浏览器提供的对象):
DOM、BOM