构造函数模式

作者: Duzling | 来源:发表于2018-12-25 17:17 被阅读7次

用构造函数创建特定类型的对象,从而可以自定义自定义对象类型的属性和方法

与工厂模式的区别

  • 没有显示地创建对象
  • 直接将属性和方法赋给了this对象
  • 没有return语句
  • 创建实例时,必须使用new操作符
    以new创建对象会经历一下步骤
    1. 创建一个新对象
    2. 将构造函数的作用域赋给新对象(因此this就指向了这个新对象)
    3. 执行构造函数中的代码
    4. 返回新对象

constructor属性最初是用来标识对象类型的

示例

var Person = function(name, age) {
  this.name = name;
  this.age = age;
  this.sayName = function() {
    return this.name;
  };
};

var person1 = new Person('duke', 22);
var person2 = new Person('dome3', 24);
var person3 = Person('no new', 0);
console.log('person1=>', person1);
console.log('person2=>', person2);
console.log('person3=>', person3); // undefined 必须使用new创建对象
console.log('is method equal=>', person1.sayName === person2.sayName); // false

console.log('instance constructor1=>', person1.constructor === Person);  // true
console.log('instance constructor2=>', person2.constructor === Person);  // true
console.log('instanceof1=>', person1 instanceof Person); // true
console.log('instanceof2=>', person2 instanceof Person); // true
console.log('instanceof2=>', person1 instanceof Object); // true

构造函数也是函数,像普通函数一样,直接调用,属性和方法属于全局对象Global(浏览器中为window对象),如示例中的person3

优点

除了工厂模式的特点,主要解决对象类型识别的问题

缺点

对象的方法,在每个实例中都要重新创建一遍,导致不同的作用域链和标识符解析,但是创建函数实例的机制相同,因此不同实例上的同名函数相同

为了在示例中共享方法而在全局作用域中定义方法,这样能解决以上问题,但是同时产生另外一个问题:在全局作用域中定义的函数只能被某个对象调用,这样全局作用域就有点儿名不副实了,而且若需要定义很多函数,那我们自定义的引用类型就没有封装性可言了

由此,[[原型模式]]可以解决该问题

相关文章

  • 前端面试题总结【37】:javascript对象的几种创建方式

    工厂模式 构造函数模式 原型模式 混合构造函数和原型模式 动态原型模式 寄生构造函数模式 稳妥构造函数模式 推荐:...

  • 对象的创建与继承

    创建对象 工厂模式 => 构造函数模式 => 原型对象模式 => 构造函数模式+原型对象模式 工厂模式 构造函数模...

  • 构造函数-js-高级程序设计-第六章笔记

    前言 理解对象 创建对象构造函数模式原型模式组合使用构造函数模式和原型模式动态原型模式寄生构造函数模式稳妥构造函数...

  • 第六章——创建对象

    一、寄生构造函数模式、工厂模式、稳妥构造函数模式的区别与联系 寄生构造函数模式(重写了构造函数的返回值): 工厂模...

  • 前端设计模式

    1.写出 构造函数模式、混合模式、模块模式、工厂模式、单例模式、发布订阅模式的范例。 构造函数模式 构造函数模式是...

  • JS函数

    1.0 工厂模式 2.0 构造函数模式 3.0 原型模式 4.0 构造函数 + 原型模式 实例化构造函数时,返回的...

  • Js创建对象的几种模式

    Js创建对象的几种模式 工厂模式 构造函数模式 原型模式 组合使用构造函数模式和原型模式 动态原型模式 稳妥构造函数模式

  • 设计模式

    构造函数模式 混合模式 混合模式就是构造函数模式和原型模式的混合,在混合模式中,构造函数用于定义实例属性,而原型模...

  • js最常用的创建对象和继承方法

    对象创建方法有很多种:工厂模式、构造函数模式、原型模式,动态原型模式、寄生构造函数模式、稳妥构造函数模式……继承的...

  • 常见设计模式

    1.写出 构造函数模式、混合模式、模块模式、工厂模式、单例模式、发布订阅模式的范例。 //1.构造函数模式//构造...

网友评论

    本文标题:构造函数模式

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