1 编程思想
/**
*编程思想:把一些生活中做事的经验融入到程序中
*面向过程:凡事都亲力亲为 每件事的具体过程都要知道 注重的是过程
*面向对象:根据需求找对象 所有的事情都用对象来做 注重的是结果
*
*
*面向对象特性:封装 继承 多态(抽象性)
*js不是面向对象的语言,但是可以模拟面向对象的思想
*js是一门基于对象的语言:
*万物皆对象-------->狗 人
*
*
*什么是对象?
*看得见 摸得到 具体特指的某个东西
*
*找对象
*描述对象
*文字描述找对象
*小明牵着小狗去逛街
*一台电视机正在播放新闻
*
*
*分析对象有什么特点:特征和行为
*对象:有特征和行为 具体特指的是某一个事物
*
*对象:有属性和方法 具体特指的是某一个事物
*
*
*没有对象
*
*
*
*
*
*创建对象
*
*
*/
// 声明一个空对象
var o = {}
// 声明一个不空的对象
var o = {
name:"王大伟",
age:18,
sex:"male",
married:false,
// 方法:如果对象中哪一条属性的属性值是一个函数,那么我们就不太愿意把它叫成属性,而愿意叫做方法。
sayHello:function(){
alert("我叫王大伟~O(∩_∩)O")
return 1;
}
}
// !!对象的查询的两种写法:
Object.属性名 在Object对象中直接查找某个属性名的所对应的属性值
Object["属性名"] 与上面等价
Object[属性名] 把属性名看做成一个变量,首先从js执行环境上下文中获取该变量存放的值(如:"a"),然后再从Object对象中查找变量中存放的值所对应的属性的属性值(a属性的属性值)
// 对象的修改/添加
Object.属性名 = 新值
Object["属性名"] = 新值
// 删除掉对象中的某一条属性
delete Object.属性名
// 检测一个属性在另外一个对象中是否存在
"属性名" in Object
// 枚举对象
for(var i in Object){
// 循环体执行次数取决于Object属性的个数
// 每一次进入循环体的时候i依次代表了对象的属性名
// 对象的属性名
// console.log(i)
// 对象的属性值
// console.log(Object[i])
}
!基本类型和引用类型:除了Object以外所有的数据类型都是基本类型,Object自身是引用类型。在将引用类型的变量(a)赋值给另外的一个变量(b)时,b本身存储的只是一个对a的引用,也可以理解为是一个快捷方式,所以无论修改的是a还是b都会对另外的一个变量产生影响。而基本类型,在将一个变量赋值给另外的一个变量时,执行的是值的拷贝,此时有两个相同的值,所以无论修改了哪一个都不会对另外的一个变量产生影响。
入代码片
2创建对象三种方式
1 调用系统的构造函数创建对象
var 变量名 = new Object(); Object是系统的构造函数
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("放盐");
console.log("炒");
console.log("装盘");
console.log("吃");
}
obj.eat();
console.log(obj.name);
2、自定义构造函数创建对象
自定义构造函数创建对象做了那些事?
1、在内存中开辟(申请一块空闲的空间)空间 存储创建的新的对象
2、把this设置为当前的对象
3、设置对象的属性和方法
4、把this对象返回
function Person(name,age) {
this.name = name;
this.age = age;
this.sayHi = function() {
console.log("我叫:"+this.name+",年龄是:"+this.age);
};
}
var obj = new Person("小明",10);
console.log(obj.name);
console.log(obj.age);
obj.sayHi();
var obj2 = new Person("小红",18);
console.log(obj2.name);
console.log(obj2.age);
obj2.sayHi();
console.log(obj instanceof Person);
console.log(obj2 instanceof Person);
function Dog(name,age,sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
var dog = new Dog("小黑",20,"男");
console.log(dog instanceof Dog);
console.log(dog instanceof Person);
3、字面量的方式创建对象
var obj = {};
obj.name = "小白";
obj.age = 10;
obj.sayHi = function() {
console.log("我是:"+this.name);
}
obj.sayHi();
var obj2 = {
name:"小明",
age:20,
sayHi:function() {
console.log("我是:"+this.name);
},
eat:function() {
console.log("吃了");
}
}
obj2.sayHi();
obj2.eat();
入代码片
3工场模式创建对象
function createObject(name,age) {
var obj = new Object();
obj.name = name;
obj.age = age;
obj.sayHi = function() {
console.log("萨瓦斯卡 我叫:"+this.name+"我今年:"+this.age);
}
return obj;
}
var per1 = createObject("小白",18);
per1.sayHi();
var per2 = createObject("小红",22);
per2.sayHi();