//为什么要用对象?
// function loglike(name,intro,college,site){}
//函数的参数特别多的话,我们可以用对象简化
/*function printPerson(chao){
console.log(chao.name);
console.log(chao.intro);
console.log(chao.college);
console.log(chao.site);
}*/
//什么是对象
//现实生活中 对象是一个具体的事物 一个事物具有一定的行为和特征(属性)
//类与对象
//类 描述一类事物 相当于 设计图纸
//JS中可以自定义类,同时提供一个默认的类 object
//手机是一类事物,手机类 华为才是真正的对象
//对象 一个具体的事物 相当于 成品
//有自己的行为和特征 人 行为 能走路 说话 特征(属性) 年龄 性别等等
//JS中对象是无序属性的集合 其属性可以包含基本值 对象 和函数
//对象就是一组没有顺序的值,由一组组键值对构成
//事物的特征在对象中用属性表示
//事物的行为在对象中用方法表示
//JS 中对象的分类 内建对象(内置对象) 宿主对象,自定义对象
//内建对象 ES标准中定义的对象,在任何的ES的实现中都可以使用 比如说:String Number Boolean Function Object Math ……
//宿主对象 由JS的运行环境提供的对象 现在主要指浏览器提供的对象 比如 BOM对象 DOM对象
//自定义对象 自己创建的 Person Dog
//对象字面量 10086,'itlike',true,null,undefined,[]数组,{}对象
/* var zsc = {
//属性
name : "张盛超",
age : 18,
sex : "男",
//行为
doIt : function(){
console.log("我是老大");
}
};
console.log(zsc);
console.log(typeof zsc);*/
//常见创建对象的方式
//1、对象字面量
/* var zsc = {
//属性
name : "张盛超",
age : 18,
sex : "男",
//行为
doIt : function(){
console.log("我是老大");
}
};
console.log(zsc);
console.log(typeof zsc);*/
//2、new Object()创建对象 随用随加 可以节约内存
/*var zsc = new Object();
zsc.name = "张盛超";
zsc.age = 18;
zsc.sex = '男';
console.log(zsc);
console.log(typeof zsc);
*/
//3、工厂函数创建对象 可以量产 但是对象的类型不明
/*function createPerson(name,age,sex){
var person = new Object();
person.name = name;
person.age = age;
person.sex = sex;
person.doIt = function(){
console.log("helloworld");
}
return person;
}
var zsc = createPerson("Jane" , 18 ,'男');
var sc = createPerson("Curry",4,'男');
console.log(zsc);
console.log(sc);
console.log(zsc === sc);*/
//4、自定义构造函数
/*function Person(name,age,sex){
this.name = name;
this.age = age;
this.sex = sex;
this.doIt = function(){
console.log("helloworld");
}
//return this;
}
var zsc = new Person("张盛超",18,'男');
console.log(zsc);
var sc = new Person("盛超",4,'男');
console.log(zsc === sc);*/
//属性 如果一个变量属于一个对象所有,那么该变量称之为对象的一个属性 属性一般为名词,用来形容事物的特征
//方法 如果一个函数属于一个对象所有,那么该变量称之为对象的一个方法 方法一般为动词,描述事物的行为和功能
//new关键字
//一般和构造函数一起配合使用
//构造函数
//构造函数是一种特殊的函数 用于创建一类对象 首字母要大写(规范)
//构造函数要和new一起使用才有意义
//new做了什么?
//1、先在内存中创建了一个新的对象
//2、new会让this指向这个新的对象
//3、执行构造函数,给这个新对象加上属性和方法
//4、返回这个新对象
/*var p = Person();
console.log(p); //undefined 没有new执行他的动作*/
//this关键字
//this 是一个指针
//普通函数执行,内部this指向全局对象window
/*var str = 'hello';
function func(){
console.log(this); //指向window
console.log(this.str); //window中str 指向张三
}
func();*/
//函数在定义的时候this是不确定的,只有在调用的时候才可以确定
//如果函数作为一个对象的方法,被该对象所调用,那么函数内的this则指向该对象
/*var name = 'zsc';
console.log(name);//zsc
var obj = {
name : '张盛超',
age : 19,
func : function(){
console.log(this);
console.log(this.name); //张盛超
console.log(this.age); //19
}
};
obj.func(); */
//构造函数中的this是一个隐式对象,类似一个初始化的模型,所有的属性方法都挂载到了
//这个隐式对象身上,后续通过new关键字来调用,从而实现实例化
/*function Fn(){
this.name = "张盛超";
this.age = 18;
console.log(this);
}
//Fn(); //非构造函数 this指向window
new Fn();*/
//对象的使用 1、遍历对象的属性 2、删除对象的属性
//1、遍历对象的属性
var zsc = {
//属性
name : "张盛超", //实际上会转换为 'name' : "张盛超",
age : 18,
sex : "男",
//行为
doIt : function(){
console.log("我是老大");
}
};
//访问对象的属性
/*console.log(zsc.name);
console.log(zsc['name']);*///下标式 一定要加上引号 在封装的时候会用到
//遍历对象 for …… in ……
for (var key in zsc){
console.log(key + ':' + zsc[key]);
}
//删除对象的属性 delete
delete zsc.age;
console.log(zsc);
zsc.age = 30;
zsc.friends = ['蔡徐坤','吴亦凡'];
console.log(zsc['age']);
console.log(zsc);