三,前端---JS最基本的创建对象的方法

1:工厂模式
  function createPerson(name, job){
    var person = new Object();
    person.name = name;
    person.job = job;
    person.sayName = function(){
      console.log(this.name);
  }
    return person;
  }
  var person1 = createPerson('A', 'student');
  var person2 = createPerson('B', 'Docter');
  可以无数次调用这个工厂模式,每次都会返回一个包含两个属性和一个方法的对象。工厂模式虽然解决了创建多个相似对象的问题,但是没有解决对象识别的问题,既不能知道一个对象的类型。
2:构造函数模式
  function createPerson(name, job){
    this.name = name;
    this.job = job;
    this.sayName = function(){
      console.log(this.name);
    }
  }
  var person1 = new createPerson('C', 'programmer');
  var person2 = new createPErson('D', 'painter');
  没有显示的创建对象,使用new来调用这个构造函数,使用new后自动执行如下操作:
    ● 创建一个新对象
    ● 这个新对象会被执行[[prototype]]链接
    ● 这个新对象会被绑定到函数调用this
    ● 返回这个对象
  使用这个方式创建的对象可以检测(instanceof)对象类型。但是使用构造函数创建对象,每个方法都要在实例上重新创建一次。
3:原型模式
  function Person(){}
  Person.prototype.name = 'E';
  Person.prototype.job = 'athlete';
  Person.prototype.sayName = function(){
    console.log(this.name);
  }
  var person1 = new Person();
  将信息直接添加到原型对象上。使用原型的好处是可以让所有的实例对象共享它所包含的属性和方法,不必在构造函数中定义对象实例信息。
4:原型的简单模式
  function Person(){}
  Person.prototype = {
    name = 'E';
    job = 'athlete';
    sayName = function(){
      console.log(this.name);
    }
  }
  var person1 = new Person();
  将Person.prototype设置为等于一个以对象字面量形式创建的对象,但是会导致.constructor不在指向Person了。
  使用这种方式,完全重写了默认的Person.prototype对象,因此 .constructor也不会存在这里。(对于constructor接下来会有更新)

上一篇:sqli-labs less38-53(堆叠注入 order by之后相关注入)


下一篇:KNN算法介绍