javascript学习笔记4-预解析/对象

预解析
js引擎运行js 分为两步:预解析 代码执行
预解析:js 引擎会把js 里面所有的 var 还有 function 提升到当前作用域的最前面
代码执行:按照代码书写顺序从上往下执行
预解析分为:变量预解析(变量提升)和函数预解析(函数提升)
变量预解析就是把所有的变量声明提升到当前的作用域最前面 不提升赋值操作
函数预解析就是把所有的函数声明提升到当前作用域的最前面 不调用函数
 

function f1() {
        var a = b = c = 9; //相当于 var a = 9;b = 9;c = 9;(b和c直接赋值,没有var声明,属于全局变量)
        //集体声明应该是var a = 9,b = 9,c = 9;
        console.log(a);
        console.log(b);
        console.log(c);
      }
      f1();
      console.log(c);
      console.log(b);
      console.log(a);
      ///输出结果为 9 9 9 9 9 报错

对象
对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等
对象是由属性和方法组成的
属性:事物的特征,在对象中用属性来表示
方法:事物的行为,在对象中用方法来表示

创建对象的三种方式
1. 利用字面量创建对象
对象字面量:就是花括号{ } 里面包含了表达这个具体事物(对象)的属性和方法。
 

//利用对象字面量创建对象{}
      //var obj = {}; //创建了一个空的对象
      var obj={
          uname:'uye',
          age=18,
          sex:'男',
          sayHi:function(){
              console.log('hi');
          }
      }
      //1.里面的属性或者方法采取键值对的形式  键 属性名 : 值  属性值
      //2.多个属性或者方法中间用逗号隔开
      //3.方法冒号后面跟的是一个匿名函数

      //使用对象
      //1.调用对象的属性  采取 对象名.  属性名.
      console.log(obj.uname);
      //2.另一种方法:对象名['属性名']
      console.log(obj['age']);
      //调用对象的方法  对象名.方法名
      obj.sayHi();  //小括号必须添加

变量和属性的相同点:都是用于存储数据
不同点:
变量:单独声明并赋值,使用时直接写变量名,单独存在
属性:在对象里面的,不需要声明的,使用时必须是 对象.属性
函数和方法的相同点:都是实现某种功能 做某件事
不同点:
函数:单独声明且调用的,函数名()单独存在
方法:在对象里面,调用的时候 对象.方法
2. 利用new Object创建对象

 var obj = new Object(); //创建了一个空的对象
      obj.uname = "杨冉然";
      obj.age = 18;
      obj.sex = "女";
      obj.sayHi = function () {
        console.log("hi");
      };
      //1.利用等号赋值的方法添加对象的属性和方法
      //2.每个属性和方法之间用分号隔开
      console.log(obj.uname);
      console.log(obj["sex"]);
      obj.sayHi();

3. 利用构造函数创建对象
构造函数 就是把对象里面的一些相同的属性和方法抽象出来封装到函数里面,这个函数称为构造函数

构造函数的语法格式

function 构造函数名(){ 
    this.属性 = 值; 
    this.方法 = function(){
    } 
}

调用构造函数的方法:

new  构造函数名();
 function Star(uname, age, sex) {
        this.name = uname;
        this.age = age;
        this.sex = sex;
        this.sing = function () {
          console.log(sang);
        };
      }
      var ldh = new Star("刘德华", 18, "男"); //调用函数返回的是一个对象
      console.log(ldh.name);
      console.log(ldh["sex"]);
      ldh.sing("冰雨");
      
      var zxy = new Star("张学友", 19, "男");
      console.log(zxy.name);
      zxy.sing("李香兰");
      
      //1.构造函数名字的首字母必须要大写
      //2.我们构造函数不需要return 就可以返回结果
      //3.调用构造函数必须使用new
      //4.只要new Star () 调用函数就创建一个对象
      //5.属性和方法前面必须添加  this

构造函数和对象之间的联系:

构造函数:泛指某一大类,相当于java中的类,是抽取了对象的公共部分封装到函数里。

对象:特指某一个,通过new关键字创建对象的过程称为对象实例化

new关键字

执行过程:
1.new 构造函数可以在内存中创建了一个空的对象
2.this 就会指向刚刚创建的空对象
3.执行构造函数里面的代码,给这个空对象添加属性和方法
4.返回这个对象

遍历对象
格式:
for (变量 in 对象){ }
 

 var obj={
        uname:'杨冉',
        age=18,
        sex:'女',
        sayHi:function(){
          console.log('hi');
        }
      }

      for (var k in obj){
          console.log(k);  //k变量输出 得到的是属性名,
          console.log(obj[k]); //obj[k]得到的是属性值

      }
      //for in 里面的变量,习惯用 k
      //方法也一样能遍历出来,但一般不用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值