美文网首页
JS面向对象基础操作2

JS面向对象基础操作2

作者: likeli | 来源:发表于2017-12-20 20:46 被阅读0次

构造函数

类似于类的概念 约定俗成 首字母大写

  • 简单举个例子:

    function Dog(name, age, sex) {
          this.name = name;
          this.age = age;
          this.sex = sex;
          this.action = function() {
              console.log("吃 撒欢 叫");
          }
      }
    //调用构造函数
    //实例化 关键字 new(把抽象类具体化,把类变成对象)
      var ahuang = new Dog("阿黄", "2", "母");
      var dahei = new Dog("大黑", "2", "母");
      var abiao = new Dog("阿🐯", "2", "母");
      ahuang.action()
      console.log(abiao);
    
E0D5C827-5D5E-44A2-BA81-74471441EE77.png
  • new在构造函数中做了什么?
    1.创建了一个空的对象

    var obj = {}
    

2.改变了this指向:call apply bind

  Car.call(obj, "w6", "red");

传参:
apply:接收数组
call:接收字符串
3.赋值原型:

  obj.__proto__ = Car.prototype;

对象是由自身和原型共同构成的 对象的原型:proto
构造函数是由自身和原型共同构成的 构造函数的原型:prototype
属性写在构造函数里面,方法写在原型上
constructor找到函数本身

  console.log(Person.prototype.constructor)
  • 类的特征:封装 继承 多态 重载
    封装 公有,私有属性

    function Person(name){
          //私有属性
          var name=name;
          //公有属性
          this.height="195cm";
          this.get=function(){
      //      get 通过共有方法访问私有属性
              return name;
          }
      //set方法 设置私有属性
          this.set=function(newname){
              name=newname;
              console.log(newname);
          }
      }
      var newPerson=new Person("张三");
      console.log(newPerson.get())
      console.log(newPerson.set("李四"))
    
C3A46A1F-7ED6-4EF6-81C6-318773B40BBA.png

分析结果:首先get是通过公用属性访问私有属性可以访问到,而set与其相反也就访问不到数据,只有内部自身能访问到

继承

  function Person(sex, height) {
        this.sex = sex;
        this.height = height;
        //          this.hobby=function(){
        //              console.log("吃苦耐劳")
        //          }
    }
    Person.prototype.hobby = function() {
        console.log("我是人类")
    }

    function Student(sex) {
        //Person.call(this,sex);
        Person.apply(this, [sex]);
        //Person.bind(this)(sex);
        this.action = function() {
            console.log("贪玩");

        }
    }
    //涉及到传址的问题
    //Student.prototype=Person.prototype
    //重新写子集的方法也会影响到父级
    //      解决传址问题
    function Link() {};
    Link.prototype = Person.prototype;
    Student.prototype = new Link();
    console.log(Student.prototype);
  //        Student.prototype.hobby = function() {
  //            console.log("我是")
  //        }
    //      var newStudent=new Student("男");
    var newStudent = new Student("男");
    //var newStudent=new Student("男");
    console.log(newStudent.sex);
    newStudent.hobby();
    newStudent.action();
    var newPerson = new Person("男", "182cm");
    console.log(newPerson)
    newPerson.hobby()

使用call apply bind方法继承只能继承其属性并不能继承其原型,所以要继承其原型我们还要另想它法,如果我们使用Student.prototype=Person.prototype这种样式来设置的话,这就会涉及传址问题,所以这种方式并不可取,所以最简单有效的方法就是新创建一个构造函数,用来在其中周旋如:function Link() {};Link.prototype = Person.prototype;Student.prototype = new Link();这样使用的话,不认我们怎么改变newStudent的hobby也不会影响其父级的hobby,这样我们就结局了继承问题。

相关文章

  • JS面向对象基础操作2

    构造函数 类似于类的概念 约定俗成 首字母大写 简单举个例子:function Dog(name, age, se...

  • js面向对象基础操作1

    面向对象与面向过程 定义面向过程:是一种以过程为中心的编程思想。,注重解决问题的步骤分析问题需要的每一步,实现函数...

  • JS面向对象精要(二)_函数

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • JS面向对象精要(三)_理解对象

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • JS面向对象精要(四)_构造函数和原型对象

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • JS面向对象精要(五)_继承

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • js面向对象

    本文将循序渐进的介绍js面向对象的基础知识。 什么是面向对象呢? 面向对象编程 (OOP : Object Ori...

  • JS面向对象

    JS面向对象入门 1、面向对象语言概念面向对象语言主要包括 类、对象、封装、多肽。2、面向对象的编程思想面向过程思...

  • JS面向对象(基础)

    一、面向过程和面向对象的区别、联系 1.面向过程编程:注重解决问题的步骤,分析问题需要的每一步,实现函数依次调用。...

  • JS原型理解

    原型链是整个JS面向对象的基础在理解原型链之前先来谈谈JS创建对象的几种方式 可以看到输出了4个对象,a1和a2看...

网友评论

      本文标题:JS面向对象基础操作2

      本文链接:https://www.haomeiwen.com/subject/wjdnwxtx.html