<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
  </head>
  <body>
    <script>
      //1.创建对象
      var person = new Object();
      person.name = '张三';
      person.age = 18;
      person.sayName = function() {
        console.log(this.name);
      }
      //字面量形式
      var person = {
        name: '张三',
        age: 18,
        sayName: function() {
          console.log(this.name);
        }
      }
      //2.工厂模式:可以解决创建多个对象的问题,不足:不知道一个对象的类型
      function createPerson(name, age) {
        var o = new Object();
        o.name = name;
        o.age = age;
        o.sayName = function() {
          console.log(this.name);
        }
        return o;
      }
      var person1 = createPerson('张三',18);
      var person2 = createPerson('李四',16);
      //3.构造函数:可以解决对象类型的问题,不足:方法共享问题即每个方法都要在每个实例上重新创建一遍。
      function Person(name, age) {
        this.name = name;
        this.age = age;
        this.sayName = function() {
          console.log(this.name)
        }
      }
      var person1 = new Person('张三',18);
      var person2 = new Person('李四', 16);
      //4.原型模式:可以解决方法共享问题,不足:引用类型的数据改写一个实例所有实例跟着改写
      function Person() {};
      Person.prototype = {
        constructor: Person,
        name: '张三',
        age: 18,
        friends: ['王五', '赵六'],
        sayName: function() {
          console.log(this.name);
        }
      }
      var person1 = new Person();
      var person2 = new Person();
      person1.friends.push('李立')
      console.log(person1);
      console.log(person2);
      console.log(person1.friends == person2.friends);//true 注:要把其他的代码注释掉只剩原型模式才是true否则代码会受影响
      //4.构造函数+原型:构造函数定义实例属性,原型模式定义方法和共享的属性
      function Person(name, age) {
        this.name = name;
        this.age = age;
        this.friends = ['王五','赵六']
      }
      Person.prototype = {
        constructor: Person,
        sayName: function() {
          console.log(this.name)
        }
      }
      var person1 = new Person('张三',18);
      var person2 = new Person('李四', 16);
      person1.friends.push('李立');
      console.log(person1.friends == person2.friends) //false;
    </script>
  </body>
</html>

  

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。