一:面向对象
1 面向对象:使用对象时,只关注对象提供的功能,不关注内部细节。
2 js对象的组成:方法和属性
面向对象与面向过程的异同
面向过程:所有的细节、步骤、过程要一步步亲历亲为(执行者)
面向对象:找到能完成这个事情的对象,让它帮你完成(调度者)
面向对象是对面向过程的封装。
全局污染
1 使用大量函数无法管理
2 在全局范围内有效
二:创建对象
1 对象是键值对的集合
例:var p = {
name: "jim",
age: 19,
sex: "男",
sayHello: function() {
alert("你好,哈哈哈哈");
}};
p.sayHello();p["sayHello"](); // 关联数组
缺点:无法复用
2 构造函数 优点:可以复用
构造函数使用注意点:
1) 函数名以大写字母开头(推荐)
2)不需要返回值
3)为对象添加成员使用: this.成员名=值;
4) 创建对象使用new 关键字
例:var Person = function() {
this.name = "jim";
this.age = 19;
this.gender = "男";
this.sayHello = function() {
alert("你好,哈哈哈哈");
};};
// 创建对象(构造函数Person的对象)var p = new Person();// 访问对象的 属性console.log(p.name);
// 访问对象的方法p.sayHello();
三:原型
1 原型的概念:函数对象的prototype属性所引用的对象。
2 原型 的本质就是 对象;一般函数 都有prototype属性,也就是说函数都有原型。
3 声明一个函数时,原型就随之而产生。此时默认原型 是一个空对象。但是具有一个默认的属性constructor,该属性指向其构造函数.
4 在原型上的成员(属性和方法),都可以直接被其实例访问.
获取原型的方式
1 通过函数 : <fnName>.prototype
2 通过对象:<object>.\__proto__
proto 与 prototype的区别
1 _proto_是一个非标准的属性
2 对象的_proto_与创建它的构造函数的prototype是一个东西
3 prototype是原型属性
_proto_与prototype的异同
相同点:这两个都是属性,存储的是对象是引用,这两个属性的引用指向了同一个对象
不同点:
站在不同的角度新看这两个属性:
prototype是站在构造函数的角度
_proto_是站在对象的角度,是非标准属性
原型属性和原型对象,是同一个东西,只是站在不同的角度去看一个东西,对它的不同叫法。