编程思想
编程思想:把一些生活中做事的经验融入到程序中
面向过程:凡事都要亲力亲为,每件事的具体过程都要知道,注重的是过程
面向对象:根据需求找对象,所有的事都用对象来做,注重的是结果
面向对象特性:封装,继承,多态 (抽象性)
js不是面向对象的语言,但是可以模拟面向对象的思想
js是一门基于对象的语言:
万物皆对象:---------->程序猿 程旭媛
什么是对象?
看的见,摸得到,具体特指的某个东西
分析对象有什么特点:特征和行为
对象:有特征和行为,具体特指的某一个事物
对象:有属性和方法,具体特指的某个事物
创建对象
创建对象三种方式:
1.调用系统的构造函数创建对象
var 变量名= new Object(); Object 是系统的构造函数 Array也是
2.自定义构造函数创建对象(结合第一种和需求通过工厂模式创建对象):先自定义构造函数,再创建对象
var obj=new 自定义构造函数();
3.字面量的方式创建对象
1.调用系统的构造函数创建对象
//实例化对象
var obj = new Object();
//对象有特征---属性和行为---方法
//添加属性-----如何添加属性? 对象.名字=值;
obj.name = "小苏";
obj.age = 38;
obj.sex = "女";
//添加方法----如何添加方法? 对象.名字=函数;
obj.eat = function () {
console.log("我喜欢吃油炸榴莲凉拌臭豆腐和大蒜");
};
obj.play = function () {
console.log("我喜欢玩飞机模型");
};
obj.cook = function () {
console.log("切菜");
console.log("洗菜");
console.log("把菜放进去");
console.log("大火5分钟");
console.log("出锅");
console.log("凉水过一下");
console.log("放料,吃");
};
console.log(obj.name);//获取--输出了
console.log(obj.age);
console.log(obj.sex);
//方法的调用
obj.eat();
obj.play();
obj.cook();
2.自定义构造函数创建对象
自定义构造函数创建对象,我要自己定义一个构造函数,自定义构造函数,创建对象(实例化)
函数和构造函数的区别;名字是不是大写(首字母是大写
//系统函数定义的例子:
function person(name,age) {
var obj=new Object();
obj.name=name; //属性的定义不用this,方法的定义用this
obj.age=age;
obj.sayHi=function () {
console.log("我叫:"+this.name+",年龄是:"+this.age);
};
}
console.log(person instanceof Object); //true
//自定义构造函数创建对象,先自定义构造函数,再创建对象
//自定义构造函数
function Person(name,age) {
this.name=name; //属性和方法的定义都用this,, 不用Object,
this.age=age;
this.sayHi=function () {
console.log("我叫:"+this.name+",年龄是:"+this.age);
};
}
//自定义构造函数创建对象:先自定义一个构造函数,创建对象
//创建对象 Person当成Object来使用
var obj=new Person("小明",10);
console.log(obj.name);
console.log(obj.age);
obj.sayHi();
var obj2=new Person("小红",20);
console.log(obj2.name);
console.log(obj2.age);
obj2.sayHi();
console.log(obj instanceof Person); //true
console.log(obj2 instanceof Person); //ture
//自定义狗的构造函数,创建对象
function Dog(name,age,sex) {
this.name=name;
this.age=age;
this.sex=sex;
}
var dog=new Dog("大黄",20,"男");
console.log(dog instanceof Person); //false
console.log(dog instanceof Dog); //true
自定义构造对象做了四件事:
1、在内存中开辟空间,存储创建的新的对象,开辟空间,占了两个空间,一个堆一个栈, 创建对象就是指向这个地址
2、把this设置为当前的对象
3、设置对象的属性和方法的值
4、把this这个对象返回
//创建一个图片的对象,图片有宽,有高,有大小(4M),图片可以展示内容
//自定义构造函数
function Img(width,height,size) {
this.width=width;
this.height=height;
this.size=size;
this.show=function(){
console.log("展示图片内容");
};
}
//创建对象=========实例化
var obj=new Img();
console.log(obj instanceof Img); //true
//创建一个小猫的对象,猫有颜色,体重,年龄,小猫可以抓耗子,可以打架
function Cats(color,weight,age) {
this.color=color;
this.weight=weight;
this.age=age;
this.catchMouse=function () {
console.log("抓耗子");
};
this.fight=function () {
console.log("打架");
};
}
var obj1=new Cats();
3.字面量的方式创建对象
var obj2={ }; //空对象
//添加属性
obj2.name="haha"; //可以通过点语法添加属性
obj2.age=18;
//添加方法
obj2.sayHai=function () {
console.log("你好");
}
obj2.sayHai();
//优化后的写法、
var obj2={
name:"苏苏", //注意这里是逗号
age:18,
sayHai:function () {
console.log("你好");
},
eat:function () {
console.log("吃");
},
};
obj2.sayHai();
obj2.eat();
///字面量创建对象胡缺陷:一次性对象
var obj3={
name:"小花",
age:18,
sex:"女",
};
// obj3.name="小林"; //可以通过点语法更改属性
obj3["name"]="小张"; //改变属性胡另外一种方法
console.log(obj3.name);
//点语法: 对象.名字=值 对象.名字=函数