美文网首页javascript设计模式笔记
JavaScript进阶:原型模式

JavaScript进阶:原型模式

作者: 听书先生 | 来源:发表于2022-01-21 21:36 被阅读0次
1、前言

原型模式是指的将原型对象指向创建对象的类,使得不同的类共享原型对象的方法和属性。
js中基于原型链的继承的原理本质上就是对继承过来的类的属性和方法的共享,并不是对属性和方法的拷贝。

  • 示例1:创建轮播类
    LoopImg这个类中定义轮播的相关属性和方法,轮播图的轮播方式有很多种,比如:左右滑动,3D翻转等等。因此,后面定义这两个类使用call()方法将属性执行父类的构造函数,然后在内部修改switchImg切换的方法。
// 创建一个轮播图
const LoopImg = function(arrImg, container){
    this.arrImg = arrImg;
    this.container = container;
    this.createImg = function() {}
    this.switchImg = function() {}
}

// 创建一个左右滑动效果的轮播
const SlideLoopImg = function(arrImg, container, arrow) {
    LoopImg.call(this, arrImg, container);
    this.arrow = arrow;
    this.switchImg = function() {
        console.log('left and right sliding rotation chart');
    }
}

// 创建一个左右3D转动效果的轮播
const RotateLoopImg = function(arrImg, container) {
    LoopImg.call(this, arrImg, container);
    this.switchImg = function() {
        console.log('rotation of left-right sliding effect');
    }
}

const loop = new RotateLoopImg( ['1.png','2.png','3.png'], 'rotate');

loop.switchImg();  // rotation of left-right sliding effect'
  • 存在的问题以及优化方案:
    LoopImg作为基类是要被子类继承的,如果将大量的基类的方法写在构造函数中,就会导致每次子类继承一次基类,就会执行一遍基类内部的方法,就做了大量的重复性的操作。
    为了优化性能,我们普遍将简单的一些属性赋值操作放在基类的构造函数中,复杂的逻辑处理放在原型对象链上,这样完成了方法共享的同时提高了性能。
// 解决方案的优化
const LoopImg = function(arrImg, container){
    this.arrImg = arrImg;
    this.container = container;
}

// LoopImg类的原型上添加方法
LoopImg.prototype = {
    createImg: function() {
        
    },
    switchImg: function() {
        
    }
}

const SlideLoopImg = function(arrImg, container, arrow) {
    LoopImg.call(this, arrImg, container);
    this.arrow = arrow;
}
SlideLoopImg.prototype = new LoopImg();

SlideLoopImg.prototype.switchImg = function() {
    console.log('Up and down sliding rotation chart');
}

const RotateLoopImg = function(arrImg, container) {
    LoopImg.call(this, arrImg, container);
}
RotateLoopImg.prototype = new LoopImg();

RotateLoopImg.prototype.switchImg = function() {
    console.log('Rotation of left-right sliding effect');
}

const loop = new RotateLoopImg(
    ['1.png','2.png','3.png'],
    'rotate'
);

loop.switchImg();

相关文章

  • JavaScript进阶:原型模式

    1、前言 原型模式是指的将原型对象指向创建对象的类,使得不同的类共享原型对象的方法和属性。js中基于原型链的继承的...

  • 原型和原型链篇

    原型和原型链 1.理解原型设计模式以及JavaScript中的原型规则 原型设计模式JavaScript是一种基于...

  • 设计模式之原型模式(Prototype 模式)

    引入原型模式 原型模式的实例 为什么需要使用原型模式 引入原型模式 如果读者很熟悉javascript的话,对原型...

  • 关于JavaScript创建对象的多种方式

    JavaScript创建对象的方法 工厂模式 构造函数模式 原型模式 组合使用构造函数模式和原型模式 动态原型模式...

  • JavaScript创建对象

    JavaScript中创建对象有以下七种方式: 工厂模式构造函数模式原型模式构造函数和原型组合模式动态原型模式寄生...

  • 原型模式

    Android进阶之设计模式 原型模式 定义: 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 使...

  • 技术书刊

    Javascript# ########《JavaScript设计模式》《高性能网站建设指南》《高性能网站建设进阶...

  • Javascript 基于原型的面向对象系统编程

    Javascript是使用克隆的原型模式。 1. 原型编程的规则 所有的数据都是对象(javascript中不是所...

  • 原型和原型链

    一、理解原型设计模式以及 JavaScript 中的原型规则 设计模式 工厂模式 在函数内创建一个对象,给对象赋予...

  • JavaScript进阶系列—原型

    文章来源:http://bonsaiden.github.io/JavaScript-Garden/zh/#int...

网友评论

    本文标题:JavaScript进阶:原型模式

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