js高级创建对象的四种方法

  1. 直接创建对象方法
  2. 工厂模式创建对象
  3. 构造函数创建对象
  4. 原型创建对象

1、直接创建对象方法

 <script>

    //创建学生对象,包含姓名,年龄,身高

    //直接创建对象方法

    var student = {

      name: "张三",

      age: "18",

      height: "185",

      showInfo: function () {

        console.log(this)

      }

    }

    student.showInfo()

    var student1 = {

      name: "李四",

      age: "18",

      height: "185"

    }

    var student = {

      name: "王五",

      age: "18",

      height: "185"

    }

  </script>

优点:简单

缺点:不实用,太过于繁琐,无法大量生产

2、工厂模式创建对象

 <script>

    function createStudent(name, age, height) {

      var obj = {}

      obj.name = name

      obj.age = age

      obj.height = height

      obj.showinfo = function () {

        console.log(this.name)

      }

      return obj

    }

    var s1 = createStudent("张三", 18, 185)

    var s2 = createStudent("李四", 18, 187)

    function createTeach(name, age, height) {

      var obj = {}

      obj.name = name

      obj.age = age

      obj.height = height

      obj.showinfo = function () {

        console.log(this.name)

      }

      return obj

    }

    var t1 = createTeach("王五", 56, 167)

    console.log(t1)

    // var q = t1 instanceof createTeach//false

    var q = t1 instanceof createStudent

    console.log(q)//false

  </script>

优点:可以快速生产同类型的对象

缺点:无法明确的确认对象属于何种类型

3、构造函数创建对象

<script>

    function Student(name, age, height) {

      this.name = name

      this.age = age

      this.height = height

      this.showinfo = function () {

        console.log(this.name)

      }

    }

    var s1 = new Student("张三", 18, 185)

    var r = s1 instanceof Student

    console.log(r)//true

    function Teach(name, age, height) {

      this.name = name

      this.age = age

      this.height = height

      this.showinfo = function () {

        console.log(this.name)

      }

    }

    var t1 = new Teach("李四", 57, 167)

    console.log(t1)

    var s = t1 instanceof Teach

    console.log(s)//true

    var b = t1 instanceof Student

    console.log(b)//false

  </script>

通过模拟类的方式改变this的指向

优点:可以快速生产要的到的对象且明确知道对象的类型

缺点:占内存

4、原型创建对象

 <script>

    function Student(name, age, height) {

      this.name = name

      this.age = age

      this.height = height

    }

    Student.prototype.showInfo = function () {

      console.log(this.name)

    }

    var s1 = new Student("张三", 14, 181)

    var s2 = new Student("李四", 14, 181)

    s1.showInfo()//张三

    console.log(s1.__proto_ == s2.__proto_)//true

  </script>

优点:可以量产,有明确的类型,节约空间

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值