js学习笔记(对象~堆和栈)

对象

为什么要用对象
让参数更少,代码更简洁

什么是对象
1.现实生活中:万物皆对象,对象是一个具体的事物,一个具体的事物就会有行为和特征。比如:一个人、一部手机
2.类和对象
(1)类:描述一类事物,js里可以自定义类,同时也提供了一个默认的类叫做Obiect
比如:类:人类;对象:一个人

js中的对象
1.js中的对象是无序属性的集合,其属性可以包含基本值、对象或函数
2.对象就是一组没有顺序的值,由一组组键值对构成
3.事物的特征在对象中用属性来表示
4.事物的行为在对象中用方法来表示

js中对象的分类
1.内建对象(内置对象)
由ES标准中定义的对象,在任何的ES的实现中都可以使用。Array、Boolean、Date、Math、RegExp、String、Number、Functions、Events
2.宿主对象
有JS的运行环境提供的对象,现在主要指由浏览器提供的对象
比如:BOM对象、DOM对象
3.自定义对象:我们自己创建的对象

对象字面量
字面量:10086,‘小花’,true,null,undefined,[],{}
比如:

	var pe = {
        // 属性
        name : 'hhhh',
        age : 18,
        sex : '女',
        // 行为
        dolt: function () {
            document.write('我会跳舞!');
        }
    };
    document.write(pe.name); //输出hhhh

创建对象
1.对象字面量(无法赋值)

	var pe = {
        // 属性
        name : 'hhhh',
        age : 18, //age是键,18是值
        sex : '女',
        // 行为
        dolt: function () {
            document.write('我会跳舞!');
        }
    };
    document.write(pe.name);

键值对通常写法为 name : value (键与值以冒号分割)。
键值对在 JavaScript 对象通常称为对象属性。
2.new Object()创建对象

	var xl = new Object();
    xl.name = '小耿';
    xl.age = 18;
    document.write(xl.name + '<br>');
    document.write(xl.age);

3.工厂函数创建对象

	function person(name, age, sex) {
       var p = new Object();
       p.name = name;
       p.age = age;
       p.sex = sex;
       // p.doit = function () {
       //     document.write('我会写代码。');
       // };
       return p;
   }
   var xg = person('小耿', 19, '男');
   var xf = person('小范', 19, '女');
   document.write(xg.name + '<br>' + xf.sex);

4.自定义构造函数(最常用)

	function person(name, age, sex) {
       this.name = name; //规定要用this
       this.age = age;
       this.sex = sex;
       this.doit = function () {
            document.write('我会写代码。');
       };
       // return this;可有可无,因为这里有个隐藏的return this;
   }
   var xg =new person('小耿', 19, '男');  //new 函数名(参数)
   var xf =new person('小范', 19, '女');
   document.write(xg.name + '<br>' + xf.sex);

对象的属性和方法
1.属性
如果一个变量属于一个对象所有,那么该变量就可以称之为该对象的一个属性,属性一般是名词,用来描述事物的特征
xg.name就是xg的一个属性
2.方法
如果一个函数属于一个对象所有,那么该函数就可以称之为该对象的一个方法,方法是动词,描述事物的行为和功能

关键字
1.new
(1)new关键字一般和构造函数一起配合使用
(2)构造函数是一种特殊的函数;构造函数用于创建一类对象,首字母要大写(可以不大写);构造函数要和new一起使用才有意义
(3)new做了哪些事
1)new先在内存里创建一个新的空对象;
在堆区开辟了新的空间,栈区存放地址,地址指向空间(对象)
2)new再让this指向这个新的对象;
this通过指向地址再指向堆区的对象
3)执行构造函数,给这个新对象加属性和方法
4)返回这个新对象
把this返回给xg
2.this
1)概念:this是一根指针
2)特点
(1)普通函数执行,内部this指向全局对象window

 	var s = '张三';
    function f() {
        document.write(this.s); //this指向window
    }
    f(); //输出张三

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

对象的使用
1.访问对象的属性
xg.namexg['age']

	var xg = {
       name : '小耿',
       age :18,
       sex :'男'
   }
   document.write(xg.name + '<br>');
   document.write(xg['age']);  //[]里必须是字符串

2.遍历对象的属性

	var xg = {
       name : '小耿',
       age :18,
       sex :'男'
   }
   for(var k in xg){
       document.write(k+ ':' + xg[k] + '<br>');
        //不能是xg.k,因为k此时是一个字符串
   }

2.对象的属性的增、删、改

var xg = {
       name : '小耿',
       age :18,
       sex :'男'
   }
   delete xg.sex; //delete 关键字
   xg.sex = '你猜'; //修改对象的属性
   xg.gilr = '小范'; //增添对象的属性

基本数据类型和引用数据类型
注意JS中实际上没有堆和栈的概念 ,但在内存中的表现形式和堆、栈的表现形式一样
1.基本数据类型
基本数据类型又叫做值类型,在存储时,变量中存储的是值本身,因此叫做值类型
String、Boolean、Number、Null、Undefined
2.引用数据类型
引用数据类型又叫复杂数据类型,在存储时,变量中存储的仅仅是地址(引用)
Object
3.区别
(1)JS中的变量都是保存到栈内存中的,基本数据类型的值直接在栈内存中存储,值与值之间是独立存在,修改一个变量不会影响其他的变量
(2)对象是保存到堆内存中的,每创建一个新的对象,就会在堆内存中开辟出一个新的空间,而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个内存地址,当一个通过变量修改属性时,另一个也会受到影响
4.堆和栈
(1)栈(操作系统):由操作系统自动分配、释放,存放函数的参数值、局部变量的值等
(2)堆(操作系统):存储复杂类型(对象),一般由程序员分配,若程序员不释放,由垃圾回收机制回收
JS中实际上没有堆和栈的概念

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值