面向对象编程

2017-04-11  本文已影响0人  3hours

1. 面向过程、面向对象 OOP、函数式编程

2. 面向对象三大基本特征:封装、继承、多态

封装: 隐藏内部的变量、实现的细节,暴露调用的接口方法

document.getElementById/document.getElementsByTagName

继承:实例化的对象包括了父类所有的属性及方法

多态:方法中根据传入参数个数的不同,实现不一样的功能

3. 类/对象

类是对真实世界事物的一种抽象,一种模型

对象是类的具例化/实例化,属性【特征】跟方法【行为】的集合

类是对象的抽象

纯面向对象编程,要有对象,必需创建一个类

定义一个Person类

class Person(name, age, gender) {

//伪代码

this.name = name;

this.age = age;

this.gender = gender;

this.code = function() {};

this.eat = function() {}

}

class Male extends Person {}

var p1 = new Person("Shafee", 20, "male");//实例化

4. arguments 函数内部的隐含对象,包括了调用参数的类数组对象

5. JavaScript 没有类的概念,基于原型的继承,class在ES6之前是保留字,ES6关键字

6. 原型prototype、对象、构造函数

对象:属性跟方法的集合,属性是静态的数据,方法即行为,操作数据

构造函数:在函数的前面出现new关键字,js内置的构造函数,Date/Object/RegExp/String/Number/Boolean/Function

自定义构造函数:按照约定,首字母大写,跟普通函数区分

调用: new Person() 返回实例对象

var o = new Object();

Object.prototype  === o.__proto__

原型prototype、对象、构造函数关系

对象是由构造函数创建,实例化的,字面量赋值,语法糖

对象的属性/方法的查找,a.先从自身查找,找到返回,b.找不到沿着原型链上查找,找到返回,找不到重复b步骤,直到顶级Object.prototype

7. 原型扩展方法

String.prototype.trim  去掉首尾空格

String.prototype.capticalize 首字母大写

Date.format("/")

8. 使用面向对象编程思维重写Tab切换

a.定义构造函数,并确定实例拥有的属性

b.给原型添加行为,即方法

c.实例化对象

//////////////////////////////////////////////////////////////第二天

1. 构造函数、原型、实例三者之间的关系

构造函数:函数调用前存在关键字new的

a.定义,为了跟普通函数区分,按照约定首字母大写

b.调用时使用关键字new

c.返回值,创建出来的实例

d.内部的this,指向创建出来的实例

函数定义,必存在prototype属性,指向原型

原型:属性跟方法的集合,也是一个对象[__proto__]

实例:通过构造函数创建出来的对象

必存在属性__proto__,指向原型,对象属性的查找,先从自身查找,找不到,沿着原型链从原型查找...

换句话说,对象的属性跟方法从原型上继承下来,对象的属性、方法可以重写

2. 对象的复制

for...in 遍历对象,找出自身的属性,且会搜索原型,即也会查找原型上的属性

__proto__不可枚举的属性

obj.hasOwnProperty() 返回布尔值,判断对象的属性是否自有/自身属性

JSON.parse(JSON.stringify(o1)) 可以将只有属性/不存在方法的对象复制

JSON.stringify 将对象转换成字符串,转换的过程,会忽略掉方法

3. instanceof 判断对象是否是构造函数的实例,是返回true,否返回false

obj instanceof Object

1. review

obj.hasOwnProperty(name)  判断属性name是否obj对象的自身属性

for...in 遍历对象/数组

o1 instanceof Object 判断实例对象o1是否为Object所创建的实例

jQuery 仿写

homework:JS中没有类的概念,JS中的继承是基于原型链的。请以原型继承以及构造函数组合来实现创建一辆小车,车包含的属性有name,price,speed。继承的方法包含drive(),stop()以及fly()

上一篇下一篇

猜你喜欢

热点阅读