面向对象编程(OOP)----BLUE大师JS课堂笔记
1.面向对象时,只关注对象提供的功能,不关注其内部的细节。 如JQUERY
2.面向对象时一种通用思想,并非只有编程中能用,任何事情都可以用。如公司里的上传下达
3.面向对象编程(OOP)的特点,传统的书本会说:多态,封装,继承三大特点
应该还能理解成抽象,封装,继承三大特点
抽象:抓住核心问题
封装:不考虑内部实现,只考虑功能使用
继承:从已有对象上,继承出新的对象
4.对象的组成
方法---------函数:过程,动态的
属性---------变量:状态,静态的
变量和函数是自由的,属性和方法属于一个对象
5.this:当前的方法属于谁,this就是指谁 除了在函数面前有new的时候
function Person(name,sex) { this.name=name; this.sex=sex;
alert(this);
}
var p1 = new Person("leo","男");
在这里的this是Object
原因是这个函数相当于
function Person(name,sex) { var this = new Object(); //虽然在JS里面不能这么写,但是差不多是这个意思,创建一个新的对象。 this.name=name; this.sex=sex; //给this对象赋属性 return this; //返回this }
6.构造对象的函数称之为构造函数,不具备实际功能,只能用来构造对象 如:var arr = new Array();
7.工厂方式构造对象。工厂的工作流程是这样的a.原料 b.加工 c.出厂。用工厂方式构造对象也是一样的,首先要创建一个对象(加工),然后给对象添加方法和属性(加工),最后返回对象(出厂)。例子:
function CreatePerson(name,sex) { var person = new Object(); //原料 person.name=name; person.sex=sex; person.show=function() { alert(this.name); } //加工,给对象添加方法和属性 return person; //出厂,返回对象 }
8.工厂的方式有2个问题。问题一:没有new;问题二:每个对象都有一套自己的函数,极其浪费资源。
为了解决问题一:
function Person(name,sex) { this.name=name; this.sex=sex; } var p1 = new Person("leo","男");
用了一个new 把构造函数内部的 创建对象和返回对象给省去了。
为了解决问题二:
Person.prototype.show=function() { alert(this.name); }
给原型添加了方法,基于这个构造函数创建出来的对象就都具有这个方法了,而且是共用一个方法,而不是像工厂模式那样的每个对象new一个function,这个极大地节省了资源,就像工厂生产蛋糕的模式,虽然生产出那么多得蛋糕,但是用的却是一个模子,而不是每生产一个蛋糕就用一个模子。
类---------------------模子
对象(实例)-----------蛋糕
原型一个重要应用-----扩展功能
9.为了区别普通函数和构造函数,构造函数首字母大写。
10.混合写法:构造函数放属性,原型放方法。
11.alert(typeof Date); 弹出function 因为Date是构造函数