万物皆对象
js是一门什么样的语言?
是一门解释性的语言;
是一门脚本语言;
是一门弱类型语言(声明变量都用var);
是一门基于对象的语言
一门动态语言(对象里面没有什么,通过点语法,就可以为对象添加属性和方法了)
什么是对象?
1.具体特指的是某一个事物拥有的属性和方法;
2.是一组无序属性的集合(里面的存放是没有顺序的,很多东西放在一起)
对象有属性与方法:
属性可指某一个事物的特征(如:名字,颜色,年龄);
而方法就是那个事物的行为(如:吃,睡,玩);
编程思想:
面向过程:事事亲力亲为,注重的是过程
面向对象:提出需求,找对象,让对象为我们做事,注重的是结果;
面向对象的特征:封装,继承,多态(抽象性)
封装:把一些重用的代码进行包装,放到某个地方,需要时直接调用
继承:指类与类的概念;
要明确js不是面向对象的语言,而是基于对象的语言;
由于js没有类的概念,所有没有继承和多态,但可以模拟面对对象的思想;
面向对象的思想:就是抽象过程===+创建对象实例化过程
{Person:
特征:名字,年龄,性别
行为:吃,喝,玩
}
这个分析的过程,包含在代码中体现,所有对象共同的特征/特点统一到一起,这都是抽象过程;
再通过实例化对象就可模拟真实事件;
对象是通过构造函数创建的
所以,在js中所有的构造函数都是虚拟的东西,而真正能看到的是实例化的对象;
创建对象的三种方式
1.调用系统的构造函数创建对象
// 调用系统的构造函数
var bb=new Object();
bb.name="雨来";
bb.age=25;
bb.eat=function () {
console.log("喜欢吃大蒜");
};
2字面量创建对象
//字面量对象
var per1={
name:"溢达",
age:8,
eat:function () {
console.log("喜欢吃大西瓜")
},
read:function () {
console.log("喜欢看书")
},
say:function () {
console.log("我叫"+this.name);
}
};
console.log( per1);
per1.eat();
per1.read();
per1.say();
3.自定义构造函数创建对象
//自定义构造函数
function Person(name,age) {
this.name=name;
this.age=age;
this.eat=function () {
console.log("他更变态,喜欢吃辣椒");
}
}
// 实例化对象,并初始化
var per4=new An("夏红",22);
console.log(per4);
per4.eat();
4.结合系统构造函数和自定义构造函数通过工厂模式创建对象
(自定义构造函数里面是包含工厂模式的)
//工厂模式
function person(name,age) {
var cs=new Object();
cs.name=name;
cs.age=age;
cs.play=function () {
console.log("喜欢遛狗");
};
return cs;
}
对比自定义构造函数 和 工厂模式构造函数:
同:都是函数,都可以传参,都可以创建对象
不同:
工厂模式构造函数:
1.函数名是小写(首字母)
2.有返回值
3.有new
4.直接调用函数就可以创建对象
自定义构造函数:
1.函数名是大写(首字母);
2.没有返回值
3.通过new的方式来创建对象
4.this是当前对象