JavaScript基础Day05:对象

JavaScript基础Day05:对象

一、对象

​ JavaScript的对象是无序属性的集合。其属性可以包含基本值、对象或函数。对象就是一组没有顺序的值。我们可以把JavaScript中的对象想象成键值对,其中值可以是数据和函数。(特征—属性 行为—方法)

1. 创建对象

  • 通过系统的构造函数创建对象:var obj = new Object();
  • 自定义构造函数创建对象
  • 通过字面量创建对象

2. 自定义构造函数创建对象

  1. 申请空闲空间,存储创建的对象
  2. 把this设置为当前对象
  3. 设置对象的属性和值
  4. 把this这个对象返回
  • demo01:自定义构造函数创建对象
//自定义构造函数
function Person(name, age) {
    this.name = name;
    this.age = age;
    this.sayHi = function () {
        console.log(name + "," + age);  //haha,18
    }
}
var obj1 = new Person("haha", 18);  //创建对象
obj1.sayHi();
console.log(obj1 instanceof Person);    //true

3. 通过字面量创建对象

  • demo02:通过字面量创建对象
var obj1 = {};	//跟字面量创建数组一样的思路
obj1.name = "嘻嘻";
obj1.age = 18;
obj1.eat = function () {
    console.log(this.name + "在吃东西");    //嘻嘻在吃东西
};
obj1.eat();
  • demo03:优化字面量方法创建对象
var obj2 = {
    name: "哈哈",
    age: 20,
    eat: function () {
        console.log(this.name + "在吃东西");    //哈哈在吃东西
    }
};

4. new关键字

构造函数 ,是一种特殊的函数。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。

  1. 构造函数用于创建一类对象,首字母要大写
  2. 构造函数要和new一起使用才有意义。

new在执行时会做四件事情:

new会在内存中创建一个新的空对象;
new会让this指向这个新的对象;
执行构造函数目的:给这个新对象加属性和方法;
new会返回这个新对象。

5. this关键字

  1. 函数在定义的时候this是不确定的,只有在调用的时候才可以确定
  2. 一般函数直接执行,内部this指向全局window
  3. 函数作为一个对象的方法,被该对象所调用,那么this指向的是该对象
  4. 构造函数中的this其实是一个隐式对象,类似一个初始化的模型,所有方法和属性都挂载到了这个隐式对象身上,后续通过new关键字来调用,从而实现实例化

二、对象的使用

1. 获取属性(两种写法)

function Person(name, age) {	
    this.name = name;
    this.age = age;
    this.eat = function () {
        console.log("我来吃饭啦");
    }
}
  • 正常访问获取:对象.属性

var obj1 = new Person("哈哈", 18);
console.log(obj1.name);    //哈哈
console.log(obj1.age);     //18
obj1.eat();    //我来吃饭啦
  • 另一种写法:对象[“属性”]
var obj2 = new Person("嘻嘻");
obj2["age"] = 20;
console.log(obj2["name"]);  //嘻嘻
console.log(obj2["age"]);   //20
obj2["eat"]();  //我来吃饭啦

2. 遍历对象的属性:使用for-in语法

  • demo04:遍历对象的属性
var obj = {
    name: "哈哈",
    age: 20
};
for (var key in obj) {
    console.log(key+"--"+obj[key]);
}
//结果:
//  name--哈哈
//  age--20

3. 简单类型和复杂类型

基本类型又叫做值类型,复杂类型又叫做引用类型

值类型:简单数据类型,基本数据类型,在存储时,变量中存储的是值本身,因此叫做值类型。(存在与堆中)

引用类型:复杂数据类型,在存储是,变量中存储的仅仅是地址(引用),因此叫做引用数据类型。(对象存在于堆,地址存在于栈)

  • 堆和栈

    堆栈空间分配区别:
      1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
      2、堆(操作系统): 存储复杂类型(对象),一般由程序员分配释放, 若程序员不释放,由垃圾回收机制回收,分配方式倒是类似于链表。
    
  • 注意:JavaScript中没有堆和栈的概念,此处我们用堆和栈来记录,目的方便理解和学习。

  • demo05:练习复杂类型
function Person(name, age, salary) {
    this.name = name;
    this.age = age;
    this.salary = salary;
}
function f1(person) {
    person.name = "ls";
    person = new Person("aa", 18, 10);
}
var p = new Person("zs", 18, 1000);
console.log(p.name);    //zs
f1(p);		//使用p对象作为参数传入函数f1中,person.name重新赋值为ls
console.log(p.name);    //ls
//1.
var num1 = 10;
var num2 = num1;
num1 = 20;
console.log(num1);  //20
console.log(num2);  //10

//2.
var num = 50;
function f1(num) {
    num = 60;
    console.log(num);   //60
}
f1(num);
console.log(num);   //50,函数中的num是参数传递,num=60是局部变量

//3.
var num1 = 55;
var num2 = 66;
function f1(num, num1) {
    num = 100;
    num1 = 100;
    num2 = 100;
    console.log(num);   //100
    console.log(num1);  //100
    console.log(num2);  //100
}
f1(num1, num2);
console.log(num1);  //55
console.log(num2);  //100
console.log(num);   //报错
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值