1、现实中的对象:
对象是一个具体的实实在在的事物,特指的某一个。
在对象里面的外在特性(名词)称为 属性
在对象里面做一些行为(动词)称为方法
属性和方法的区别就是属性不加(),方法加()。
2、程序中的对象:
用程序和数据来描述现实中的对象(就是一片内存空间,其中有数据和处理数据的程序)
本质:对象就是一组 无序的 相关属性和方法 的 集合
3、为什么要用对象?
1)、表达结构更清晰
2)、可以大量重复使用
可以通过对象来封装函数和变量
4、创建对象
1)、通过对象字面量来创建对象{}
var object={};//创建一个空对象
//一个{}就是一个对象
var obj={
name:'刘德华';
age:18;
sex:'男';
sayHi:function(){
console.log('hi');
}
}
1)、属性采用的是 属性名:属性值
2)、多组属性之间用 ,隔开
3)、方法后面跟的是 匿名函数
使用对象属性
对象名.属性名 或者对象名['属性名']
//对象的调用
console.log(obj.name);
console.log(obj.sex);
console.log(obj['age']);
使用对象的方法
对象名.方法名()
obj.sayHi();
2)、利用new Object创建对象
var obj=new Object(); //创建一个空对象 类似于var obj ={};
var obj=new Object();
name:'刘德华';
age:18;
sex:'男';
sayHi:function(){
console.log('hi');
}
创建一个空对象 追加属性属性的方式 对象名.属性名=值
创建一个空对象 追加属性属性的方式 对象名.属性名=function(){}
使用方法跟前面一样
//对象的调用
console.log(obj.name);
console.log(obj.sex);
console.log(obj['age']);
obj.sayHi();
3)、函数和方法的区别:
函数是独立存在的 调用的时候直接写 函数名()
方法是在对象里面的 调用的时候 对象名.方法名()
5、自定义构造函数
构造函数 ,是一种特殊的函数。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。
封装多个对象相同的属性和方法 泛指某一大类类似其他语言的class
function 构造函数名(参数1,...){ //构造函数名的首字母要大写
this.属性名=属性值; //this 当前的意思 因为我们对象有很多,this就是当前传递过的那个对象
this.方法名=function() {
}
}
//调用构造函数
new 构造函数名();
//构造函数
function Obj(name, sex, age) {
this.name = name;
this.age = age;
this.sex = sex;
this.sing=function(){
console.log('唱歌');
}
}
//使用构造函数 需要使用new
//所以是new可以让一个泛指的转变为特指的 对象(实例化)
var ldh=new Obj('刘德华',48,'男');
console.log(ldh.name);
console.log(ldh.sex);
console.log(ldh.age);
ldh.sing();
构造函数和普通函数的区别:
1)、函数名必须大写
2)、在函数中定义变量和方法需要使用this.进行修饰
3)、不需要返回值
4)、构造函数调用时使用new构造函数进行调用,返回值就是一个对象,可以用变量来接收
构造函数和对象(实例)
如上一个例子
1、Obj()是构造函数 主要是 初始化对象 用的。泛指某一大类 类似其他语言的 类 (class)
2、new Obj() 创建对象 用的。特指某一个
通过 new关键字 创建对象的过程 我们也称为 对象实例化。
6、new关键字
可以利用构造函数 产生一个新的对象
function Stars(name, age) {
this.name = name;
this.age = age;
this.sayHi =function() { console.log('h1');
}
}
var ldh = new Stars('刘德华', 18);
执行过程
1)、new构造函数 会在内存中创建新的空对象
2)、this就指向我们创建的这个空对象
3)、执行构造函数里面的代码 目的:给这个新对象加属性和方法
4)、返回这个新对象 (所以构造函数里面不需要return)
7、this指向问题
1、在函数中的指向 window
因为window调用了这个函数 谁调用我的this就是谁
function fn(){
console.log(this);
}
fn(); // window.fn()
扩展:
在浏览器运行js时,有一个顶级对象,这个对象是window
例如:
alert()其实是window.alert()
console.log() 其实是window.console.log()
2、在对象中的指向 obj 对象 即 调用者
var obj={
name:'',
sayHi:function(){
console.log(this);
that=this;
}
}
obj.sayHi();
console.log(that===obj);//true
3、在构造函数中的指向 ff 调用者
function Fn(){
console.log(this);
that=this;
}
var ff=new Fn();
☆☆☆谁调用 我的this就是谁☆☆☆
function singsong() {
console.log(this);
}
/* function singsong() {
console.log(this.name);
} */
var ldh = {
name: '刘德华',
age: 18,
sex: '男',
sing: singsong
}
var zxy = {
name: '张学友',
age: 19,
sex: '男',
sing: singsong
}
//谁调用我,我的this就是谁
ldh.sing();
zxy.sing();
/* ldh.sing(); //刘德华
zxy.sing(); //张学友 */
8、遍历对象
用for in遍历
//遍历对象
var obj = {
name: 'andy',
age: 20,
sex: '女'
}
/* for(变量 in 对象){
变量输出的是属性名
对象[变量]输出的是属性值
} */
for (var k in obj) { //一般情况下,变量用k
console.log(k);//k代表属性名
console.log(obj[k]); //obj[k]代表属性值
}
9、遍历JSON格式
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。
1. JSON 写法基本跟对象一致 采取的是键值对
2. 里面的属性和值都要用 双引号 括起来
var json = {
"id": 1,
"name": "andy",
"age": 18,
"address": "山东"
}
// 遍历json 用 for in
for (var k in json) {
console.log(k); // 输出的是 json 属性名
console.log(json[k]); // 输出的是 json 属性值
}