最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • JS从0开始(八)对象、构造函数

    正文概述 掘金(我会接网线)   2020-12-11   506

    一. 对象

    对象内的函数叫做方法,写在外部的函数叫做函数
    对象删除方法时不能写括号:

       <script>
            var obj = {
                name: 'a',
                teach: function () {
                    console.log("aa");
                }
            }
            delete obj.teach;
            console.log(obj);
        </script>
    

    delete obj.teach; 后面不需要加(),加了括号会自动执行造成删不掉,输出时还能看见。

    二 . indexOf()、splice()

    1.indexOf():返回某个指定的字符串值在字符串中首次出现的位置。 如果没有找到匹配的字符串则返回 -1。

    2.splice() 方法用于添加或删除数组中的元素。如splice(2,1):从数组第二个开始删除一个元素

    实例:学生上课报道系统 , 到6个人就输出到齐

      <script>
        var attendance = {
          student: [],
          total: 6,
          join: function (name) {
            this.student.push(name);
            if (this.student.length === this.total) {
              console.log(name + "到课,学生已到齐");
            } else {
              console.log(name + '到课,学生未到齐');
            }
          },
          leave: function (name) {
            var idx = this.student.indexOf(name);
            if (idx !== -1) {
              this.student.splice(idx, 1);
            }
            console.log(name + "早退");
            console.log(this.student);
          },
          classOver: function(){
            this.student = [];
            console.log("已下课");
          }
        }
        attendance.join("张三");
        attendance.join("李四");
        attendance.join("王五");
        attendance.join("赵六");
        attendance.join("吴七");
        attendance.join("孙八");
        attendance.leave("李四");
        attendance.classOver();
      </script>
    

    三.创建对象的方式

    1. 对象字面量

    对象字面量只是JS中一种创建对象的方法

    var obj = {
     name:"张三",
     sex:"male"
    }
    obj.name = "李四"
    

    声明了一个变量(obj)   将一个对象({name:... ,})   赋值给变量(obj),这种方式称之为对象字面量(或者叫对象直接量)

    2.构造函数

    用系统内自带的构造函数,通过new关键字去实例化一个对象
    用系统内置的new Object()来创建一个对象;
    对象是通过实例化构造函数而构造的一个对象实例

    var obj = new Object();
    obj.name = "张三"
    /用这样的方式给它添加属性
    

    2.1自定义构造函数

    和构造函数不同,在对象领域里面 使用键值对、用逗号分隔开来

    var teacher ={
     name = "张三",
     say: function(){
      console.log(this.name);
     }
    }
    

    2.2 构造函数的 格式

    <script>
    function Teacher(){ //为了和普通函数区分,只有它唯一使用大驼峰
    this.name = "张三";
    this.sex = "男";
    this.smoke = function(){
      console.log(I am smoking);
    }
    }
    
    /这个构造函数执行之前 this不存在  所以说this此时没生成
    /为了让this存在 必须要实例化它:
    var teacher = new Teacher();
    console.log(teacher);
    
    </script>
    

    2.3 构造工厂

    我们通过构造函数创建出来的对象是互不影响的

    <script>
    function Teacher(){ //为了和普通函数区分,只有它唯一使用大驼峰
    this.name = "张三";
    this.sex = "男";
    this.smoke = function(){
      console.log(I am smoking);
    }
    }
    
    var teacher1 = new Teacher();
    var teacher2 = new Teacher();
    teacher1.name = "李四"
    console.log(teacher1,teacher2);//输出 李四   张三
    </script>
    

    构造函数就相当于一个模板工厂,我们通过模板工厂,创建一辆又一辆的车
    我们通过构造函数实例化一个对象就相当于 我们通过构造工厂创建了teacher1、teacher2这两个人。
    当给teacher1改名字时,不影响teacher2 。 因为他们是互不相干的两个对象

    2.4 构造函数传递实参

     <script>
      
    function Teacher(name,sex,weight,course){ /形参
    this.name = name;                   / this.name = 参数name
    this.sex = sex;
    this.weight = weight;
    this.course = course
    this.smoke = function(){
     this.weight--;
     console.log(this.smoke);
    }
    }
    var teacher1 = new Teacher("张三","男","145","JS"); /输入实参
    var teacher2 = new Teacher("李四","女","90","HTML");
    
    console.log(teacher1,teacher2);//输出两个老师的对象信息 
    
    </script>
    

    也可以这样写:

     <script>
    function Teacher(opt) {
        this.name = opt.name;
        this.sex = opt.sex;
        this.weight = opt.weight;
        this.course = opt.course
        this.smoke = function () {
          this.weight--;
          console.log(this.smoke);
        }
      }
      var teacher1 = new Teacher({
        name: "张三",
        sex: "男",
        weight: "145",
        course: "JS"
      });
      var teacher2 = new Teacher({
        name: "李四",
        sex: "女",
        weight: "90",
        course: "HTML"
      });
    console.log(teacher1, teacher2);//输出两个老师的对象信息 
    </script>
    

    这样的写法就是目前的插件写法如Vue
    自己创建一个插件如01.js 里面写:

    function Teacher(opt) {
       this.name = opt.name;
       this.sex = opt.sex;
       this.weight = opt.weight;
       this.course = opt.course
       this.smoke = function () {
         this.weight--;
         console.log(this.smoke);
       }
     }
    

    然后我们在自己的页面里面写:

    var teacher1 = new Teacher({
       name: "张三",
       sex: "男",
       weight: "145",
       course: "JS"
     });
     
     var teacher2 = new Teacher({
       name: "李四",
       sex: "女",
       weight: "90",
       course: "HTML"
     });
    console.log(teacher1, teacher2);//输出两个老师的对象信息 
    
    

    实战

    1.

    写个构造函数:接收数字类型的参数,参数数量不定,完成参数相加和相乘的功能

     function Test(opt) {
              var args = arguments;
              this.add = function () {
                  var sum = 0;
                  for (var i = 0; i < args.length; i++) {
                      sum = sum + args[i];                                             
                  }
                  console.log(sum);
              },
                  this.mul = function () {
                      var a = 1;
                      for (var i = 0; i < args.length; i++) {
                          a = a * args[i];
    
                      }
                      console.log(a);
                  }
          }
    
          var test = new Test(2, 2, 3);
          test.add();
          test.mul();
    

    2.

    写一个构造车的函数:可设置车的品牌、颜色、排量,再写一个构造消费者的函数,设置用户的名字、年龄、收入,通过选择的方法实例化该用户喜欢的车,再设置车的属性。

    
          function Car(opt) {
              this.color = opt.color;
              this.brand = opt.brand;
              this.displacement = opt.displacement;
          }
          function Consumer(opt) {
              this.name = opt.name;
              this.age = opt.age;
              this.income = opt.income;
              this.selectCar = function () {
                  var myCar = new Car({
                      color: "红色",
    
                  });
                  console.log(this.age + "岁的" + this.name + '买了一辆颜色为' + myCar.color + "的车");
              }
          }
          var James = new Consumer({
              name: "James",
              age: "20",
    
          })
          James.selectCar();
    

    起源地下载网 » JS从0开始(八)对象、构造函数

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元