1.面向对象的概念
ES有两种开发模式:
1). 函数式
2). 面向对象(OOP)
类:是对象的类型模版
实例:是根据类创建的对象
对象的组成:属性 方法
2.创建对象
**1). 根据实例创建**
var obj = new Object();//创建对象实例
//新增属性
obj.name='里打哈';
obj.age=199;
//添加方法
obj.show=function(){
console.log('哈哈哈,展示.........');
};
**2). 字面量的创建:**
var obj = {};//实例
obj.name = '赵露思';
obj.show = function () {
console.log('哈哈哈,我是老赵');
};
3). 工厂函数创建对象
function createStudent(name,age){
var obj = new Object();
obj.name = name;
obj.age = age;
obj.text = function(){
console.log(this.name + "在考试,勿扰");
}
return obj;
}
var obj1 = createStudent('沐沐',21);
var obj2 = createStudent('小沐',3);
console.log(obj1,obj2);
优点:可以批量生产对象
缺点:代码相对复杂,会对每一个对象都新增方法
4). 构造函数
是最常用的一种批量创建对象的方式
特点:
1.函数名大写
2.构造函数需要通过new调用
3.构造函数没有return语句
function Dog(name,color,age){
this.name = name;
this.color = color;
this.age = age;
this.dogTech = function(){
console.log(this.name + '在抓猫');
}
}
var sen =new Dog('dada','绿色',18);
var sen2 =new Dog('tata','粉色',28);
console.log(sen,sen2);
优点:代码量比工厂函数少
可以批量生产,解决对象识别问题
缺点:内存浪费
5). 原型创建对象
1.原型—prototype:所有对象都有原型属性,原型是一个对象,放入原型中的内容是 共有的
2.proto 每一个对象的实例都有proto属性,该属性执行原型对象
3.constructor 原型对象的constructor指向构造函数
<script>
function Student(){}
Student.prototype.name = '二狗';
Student.prototype.say = function(){
console.log(this.name +'说话中……');
}
var s = new Student();
console.log(s);
s.say();
</script>
6). 混合模式创建对象
构造函数+原型
在构造函数中完成属性的添加,在原型中添加方法
是一种较为理想的创建对象的模式
<script>
function Student(name,age,sex){
this.name = name;
this.age = age;
this.sex = sex;
}
Student.prototype.say = function(){
console.log(this.name + '说森森太坏了');
}
var s = new Student('乐乐',18,'男');
console.log(s);
s.say();
</script>
7). 动态混合模式
function Person(name, age, addr) {
this.name = name;
this.age = age;
this.addr = addr;
if (!this.say) {//若say方法没有被添加过,则添加
Person.prototype.say = function () {
console.log(this.name + "说话中....");
};
}
}
var s = new Person('李四', 20, '航海路');
console.log(s);