15 (H5*) JS第5天 对象

目录

1:创建对象

2:工厂模式创建对象

3:自定义构造函数创建对象

4:自定义构造函数做了那些事情 

5:字面量方式创建对象:一次性对象

6:对象总结

7:json数据类型

8:简单数据类型和复杂数据类型

9:Math

 

复习

 

正文

 1:调用系统构造函数创建对象

 <script>
    //创建对象三种方式:
    /*
     *
     * 1.调用系统的构造函数创建对象
     * var 变量名= new Object(); Object 是系统的构造函数  Array
     *
     * 2.自定义构造函数创建对象(结合第一种和需求通过工厂模式创建对象)
     *
     *
     * 3.字面量的方式创建对象
     *
     * 4:工厂模式创建对象
     * */



    //第一种创建对象的方式
    //小苏举例子:
    //实例化对象
    var obj = new Object();
    //对象有特征---属性和行为---方法
    //添加属性-----如何添加属性?  对象.名字=值;
    obj.name = "小苏";
    obj.age = 38;
    obj.sex = "";
    //添加方法----如何添加方法? 对象.名字=函数;
    obj.eat = function () {
      console.log("我喜欢吃油炸榴莲凉拌臭豆腐和大蒜");
    };
    obj.play = function () {
      console.log("我喜欢玩飞机模型");
    };
    obj.cook = function () {
      console.log("切菜");
      console.log("洗菜");
      console.log("把菜放进去");
      console.log("大火5分钟");
      console.log("出锅");
      console.log("凉水过一下");
      console.log("放料,吃");
    };
    console.log(obj.name);//获取--输出了
    console.log(obj.age);
    console.log(obj.sex);
    //方法的调用
    obj.eat();
    obj.play();
    obj.cook();

    //练习:有一个黄色的小狗,叫大黄,今年已经三岁了,250斤的重量每次走路都很慢,喜欢吃大骨头
    //练习:创建一个手机对象,手机有型号,有颜色,可以打电话和发短信

  </script>

 

 

2:工厂模式创建对象

  <script>

    /*
     *
     * 如何获取该变量(对象)是不是属于什么类型的?
     * 语法:
     * 变量 instanceof 类型的名字----->布尔类型,true就是这种类型,false不是这种类型
     * 在当前的对象的方法中,可以使用this关键字代表当前的对象
     *
     *
     * */


    //人的对象
    //    var person=new Object();
    //    person.name="小白";
    //    person.age=10;
    //    person.sayHi=function () {
    //      //在当前这个对象的方法中是可以访问当前这个对象的属性的值
    //        console.log("您好,吃了没您,我叫:"+this.name);
    //    };
    //    //学生的对象
    //    var stu=new Object();
    //    stu.name="小芳";
    //    stu.age=18;
    //    stu.study=function () {
    //      console.log("学习,敲代码,今天作业四遍,我今年"+this.age+"岁了");
    //    };
    //    //小狗的对象
    //    var dog=new Object();
    //    dog.name="哮天犬";
    //    dog.say=function () {
    //      console.log("汪汪...我是哮天犬");
    //    };
    //
    //    //输出人是不是人的类型
    //    console.log(person instanceof Object);
    //    console.log(stu instanceof Object);
    //    console.log(dog instanceof Object);

    //对象不能分辨出到底是属于什么类型?

    //如何一次性创建多个对象?把创建对象的代码封装在一个函数中

    //工厂模式创建对象
    function createObject(name,age) {
      var obj = new Object();//创建对象
      //添加属性
      obj.name = name;
      obj.age = age;
      //添加方法
      obj.sayHi = function () {
        console.log("阿涅哈斯诶呦,我叫:" + this.name + "我今年:" + this.age);
      };
      return obj;
    }
    //创建人的对象
    var per1 = createObject("小芳",20);
    per1.sayHi();
    //创建一个人的对象
    var per2 = createObject("小红",30);
    per2.sayHi();


  </script>

 

3:自定义构造函数创建对象

 

 <script>

    //自定义构造函数创建对象,我要自己定义一个构造函数,自定义构造函数,创建对象
    //函数和构造函数的区别;名字是不是大写(首字母是大写)
    // 自定义构造函数可以直接调用(和普通函数一样。) Person();
    function Person(name,age) {
      this.name=name;
      this.age=age;
      this.sayHi=function () {
        console.log("我叫:"+this.name+",年龄是:"+this.age);
      };
    }

    //自定义构造函数创建对象:先自定义一个构造函数,创建对象
    var obj=new Person("小明",10);
    console.log(obj.name);
    console.log(obj.age);
    obj.sayHi();

    var obj2=new Person("小红",20);
    console.log(obj2.name);
    console.log(obj2.age);
    obj2.sayHi();


    console.log(obj instanceof Person);
    console.log(obj2 instanceof  Person);


    //自定义狗的构造函数,创建对象
    function Dog(name,age,sex) {
      this.name=name;
      this.age=age;
      this.sex=sex;
    }
    var dog=new Dog("大黄",20,"");
    console.log(dog instanceof Person);//false
    console.log(dog instanceof Dog);

  </script>

 

 

 

4:自定义构造函数做了那些事情

<script>

    /*
    *
    * 1. 在内存中开辟(申请一块空闲的空间)空间,存储创建的新的对象
    * 2. 把this设置为当前的对象
    * 3. 设置对象的属性和方法的值
    * 4. 把this这个对象返回
    *
    * */
    function Person(name,age) {
      this.name=name;
      this.age=age;
      this.sayHi=function () {
        console.log("我叫:"+this.name+",年龄是:"+this.age);
      };
    }

    //创建对象
    var obj=new Person("小明",10);
    console.log(obj.name);
    console.log(obj.age);
    obj.sayHi();

  </script>

 

 

 

 

 

 

5:字面量方式创建对象:一次性对象

<head>
  <meta charset="UTF-8">
  <title></title>
  <script>
    var obj={};
    obj.name="小白";
    obj.age=10;
    obj.sayHi=function () {
      console.log("我是:"+this.name);
    };
    obj.sayHi();
    var obj2={
      name:"小明",
      age:20,
      sayHi:function () {
        console.log("我是:"+this.name);
      },
      eat:function () {
        console.log("吃了");
      }
    };
    obj2.sayHi();
    obj2.eat();

  </script>
</head>

 

 

6:对象总结

 

<script>

    //字面量创建对象的缺陷: 一次性的对象

    //    var obj={
    //      name:"小明",
    //      age:38,
    //      sex:"女"
    //    };
    //    obj.name="小三";
    //    console.log(obj.name);

    //点语法:   对象.名字=值; 对象.名字=函数;
    //没有什么点,就有了

    /*
     *
     * js是一门什么样的语言?
     * 是一门解释性的语言
     * 是一门脚本语言
     * 是一门弱类型语言,声明变量都用var
     * 是一门基于对象的语言
     * 是一门动态类型的语言:
     * 1. 代码(变量)只有执行到这个位置的时候,才知道这个变量中到底存储的是什么,如果是对象,就有对象的属性和方法,如果是变量就是变量的作用
     * 2. 对象没有什么,只要点了,通过点语法,那么就可以为对象添加属性或者方法
     *
     * */

//    var obj = {};//空对象
//    obj.name = "看名字";
//    obj.age = 10;
//    obj.fly = function () {
//      console.log("飞吧");
//    };


  </script>

 

 

 

7:Json格式的数据

 

<script>
    //对象:有属性和方法,特指的某个事物
    //对象:一组无序属性的集合的键值对,属性的值可以是任意的类型
    //    function Dog(name) {
    //      this.name=name;
    //    }
    //    function Person(name,age) {
    //      this.age=age;
    //      this.name=name;
    //      this.sex=true;
    //      this.dog={};
    //      this.play=function () {
    //        console.log("喜欢玩游戏");
    //      };
    //    }
    //
    //    var sex=false;//男
    //    console.log(sex?"男":"女");


    //JSON格式的数据:一般都是成对的,是键值对,

    //json也是一个对象,数据都是成对的,一般json格式的数据无论是键还是值都是用双引号括起来的

    //    var obj={
    //      name:"小明"
    //    };


    var json = {
      "name": "小明",
      "age": "10",
      "sex": ""
    };
    //遍历对象,是不能通过for循环遍历,无序

    //key是一个变量,这个变量中存储的是该对象的所有的属性的名字
    for (var key in json) {
      console.log(key + "===========" + json[key]);
    }


    //    var key="name";
    //    console.log(json[key]);
    //可以通过for-in循环
    //
    //    for(var key in json){
    //      //console.log(key);//json对象中的属性的名字
    //      console.log(json[key]);
    //    }
    //对象中确实有这个属性对象.属性名字  或者对象[属性名字]


    //一个一个的遍历出来

    //    var arr=[10,20,30];
    //    for(var i=0;i<arr.length;i++){
    //      console.log(arr[i]);
    //    }

  </script>

 

 

8:简单数据类型和复杂数据类型

  <script>

    //原始数据类型: number,string,boolean,undefined, null,object
    //基本类型(简单类型),值类型: number,string,boolean
    //复杂类型(引用类型):object
    //空类型:undefined,null

    //值类型的值在哪一块空间中存储? 栈中存储
    //引用类型的值在哪一块空间中存储?对象在堆上存储,地址在栈上存储

    //var num=10;//值类型,值在栈上
    //var obj={};//复杂类型,对象在堆,地址(引用)在栈

    //值类型之间传递,传递的是值
    //引用类型之间传递,传递的是地址(引用)

    //值类型作为函数的参数,传递的是值
    //引用类型作为函数的参数,传递的是地址

//    var num=10;
//    var num2=num;//传递的值

//    function f1(x) {
//      x=100;
//    }
//    var num=10;
//    f1(num);
//    console.log(num);//


    var obj={
      name:"小明"
    };
    function f2(obj2) {
      obj2.name="小红";
    }
    console.log(obj.name);//
    f2(obj);
    console.log(obj.name);//


  </script>

 

 

 

 

 

 

9:Math

 <script>

    //MDN----在线的帮助文档


    // 实例对象:通过构造函数创建出来,实例化的对象
    // 静态对象:不需要创建,直接就是一个对象,方法(静态方法)直接通过这个对象名字调用,
    // 实例方法必须通过实例对象调用
    // 静态方法必须通过大写的对象调用
    // Math是对象,不是构造函数
    // Math.PI----π---
    // Math.E----常数的底数
    // Math.abs(值)-----绝对值
    // Math.ceil(值)----向上取整
    // Math.floor(值)---向下取整
    // Math.max(值)---求最大值
    // Math.min(值)---求最小值
    // Math.pow(2,4)---求2的4次方
    // Math.sqrt(16)---求16开方


//    console.log(Math.PI);
//    console.log(Math.E);

    //var mt=new Math();



//    console.log( Math.abs('-1'));//1
//
//    console.log( Math.abs(-2));//2
//    console.log(Math.abs(null));//---------0  重点
//    console.log(Math.abs("string"));//NaN

//    console.log(Math.ceil(12.3));
//    console.log(Math.ceil(12.9));
//    console.log(Math.ceil(12.09));
//    console.log(Math.ceil(12.03));
//    console.log(Math.ceil(12.92));


//    console.log(Math.floor(12.3));
//    console.log(Math.floor(12.9));
//    console.log(Math.floor(12.09));
//    console.log(Math.floor(12.03));
//    console.log(Math.floor(12.92));

//    console.log(Math.fround(2));
//    console.log(Math.fround(2.1));
//    console.log(Math.fround(2.9));

    //找一坨数字中的最大值

//    console.log(Math.max(10,1,9,100,200,45,78));
//    console.log(Math.min(10,1,9,100,200,45,78));
//    console.log(Math.pow(2,4));
//    console.log(Math.sqrt(16));

    //0-4  没有5
    console.log(parseInt(Math.random()*5)+1);
    console.log(parseInt(Math.random()*100)+1);




  </script>

 

 

注意

 

posted on 2019-10-02 08:35  风zk  阅读(166)  评论(0编辑  收藏  举报

导航