• 工厂模式以及应用场景


    工厂模式以及应用场景


    面向对象(Object-Oriented, oo)语言的一个是标志--类的概念

    类可以创建相同属性和方法的对象
    ECMAScript没有类的概念so与类的对象也有所不同
    ECMAScript-262对象:无序属性的集合(属性:基本值、对象、函数),严格来说:对象是一组没有特定顺序的的值,对象每个属性或方法都有一个名字映射到一个值
    每个对象基于一个引用类创建的

    // "use strict";

    //6.1理解对象
    var person = new Object();
    person.name = 'nick'; 
    person.age = '29';
    person.job = 'software engineer';
    person.sayName = function() {
      console.log(this.name)
    }
    //对象字面量 
    person.sayName()
    var person = { 
      name: 'nick1', 
      age: '30',
      job: 'software engineer2',
      sayName: function() {
        console.log(this.name)
      }
    }
    person.sayName()
    6.1.1 属性类型
    var person = {}
    Object.defineProperty(person, 'name', {
      writable: false, //是否修改属性的值
      value: 'nich'
    })
    console.log(person.name);
    person.name = 'greg'
    console.log(person.name);
    var person = {}
    Object.defineProperty(person, 'name', {
      writable: true,
      configurable: false, 
      value: 'nichol'
    })
    console.log(person.name);
    delete person.name
    // person.name = 'greg'
    console.log(person.name);
    var person = {}
    Object.defineProperty(person, 'name', {
      // writable: true,
      configurable: true, ///
      value: 'nichol'
    })
    console.log(person.name);
    delete person.name
    // person.name = 'greg'
    console.log(person.name);
    //访问器属性
    var book = {
      _year: 2004,
      edition: 1
    }
    Object.defineProperty(book, 'year', {
      get: function() {
      return this._year
      },
      set: function(newValue) {
        if (newValue > 2004) {
          this._year = newValue;
          this.edition += newValue - 2004
        }
      }
    })
    book.year = 2006
    console.log(book, book.edition)
    //6.2.1 工厂模式 13:04
    function createPerson(name, age, job) {
      var o = new Object();
      o.name = name;
      o.age = age;
      o.job = job;
      return o;
    }
    var person1 = createPerson("taozi", "24", "dog");
    var person2 = createPerson("dahua", "25", "worker");
    console.log(person1, person2)
    //使用场比如登陆模块需要不同的单中类型的弹框
    //需要一个错误警示框
    var LoginAlert = function(text) {
      this.content = text
    }
    LoginAlert.prototype.show = function() {
      console.log('print-----LoginAlert')
    }
    var userNameAlert = new LoginAlert('用户名不能超过16数字后者字母')
    userNameAlert.show();

    //使用场比如登陆模块需要一个确认框
    var LoginConfirm = function(text) {
      this.content = text
    }
    LoginConfirm.prototype.show = function() {
      console.log('print-----LoginConfirm')
    }
    var LoginFailConfirm = new LoginConfirm('你输入的用户名不存在')
    LoginFailConfirm.show();
    //使用场比如登陆模块需要一个Prompt
    var LoginPrompt = function(text) {
      this.content = text
    }
    LoginPrompt.prototype.show = function() {
      console.log('print-----LoginPrompt')
    }
    var LoginPrompt = new LoginPrompt('你输入的LoginPrompt')
    LoginPrompt.show();
    //三个弹框的共同点:都有text文案都有一个show方法,知识类型不同而已,可以定义一个type在show不同type现实不同show
    function createPop(type, text) {
      var o = new Object();
      o.content = text;
      o.show = function() {
        //显示方法
        if (type == 'alert') {
          //alert
        console.log('工厂模式---alert')
        }
        if (type == 'promt') {
          //promt
          console.log('工厂模式---promt')
        }
        if (type == 'confirm') {
        //confirm
        console.log('工厂模式---confirm')
        }
      }
      return o;
    }

    var userNameAlert2 = new createPop('alert', '用户名不能超过16数字字母')
    userNameAlert2.show()

  • 相关阅读:
    IdentityServer4学习笔记
    常用链接地址
    c++ 多线程(2000个)端口扫描(附源码)
    C++ 定时器Timer在项目中的使用
    [Under the hood]---Matt Pietrek October 1996 MSJ
    [under the hood]Reduce EXE and DLL Size with LIBCTINY.LIB
    TN035: Using Multiple Resource Files and Header Files with Visual C++
    单文件版本的netframework的net core 2.1
    Dependency Walker的替代品Dependencies
    怎么使用gradle给spring 打thinjar(gradle 7)
  • 原文地址:https://www.cnblogs.com/pikachuworld/p/10889749.html
Copyright © 2020-2023  润新知