说明:最近正在看Addy Osmani写的《JavaScript设计模式》这本书,故记一下读书笔记与大家分享。本文的内容基本上都出自那本书,如果觉得不错可以去买一本看看。

9.1Constructor(构造器)模式

Object构造器用于创建特定类型的对象——准备好对象以备使用,同时接受构造器可以使用的参数,以在第一次创建对象时,设置成员属性和方法的值。

9.1.1 创建对象

    var newObject=new Object();//var newObject={};//1.直接设置属性newObject.hello1="hello 1";
    console.log(newObject.hello1)//2.中括号法newObject["hello2"]="hello 2";console.log(newObject.hello2);//3 设置对象属性,并修改现有属性的特性Object.defineProperty(newObject,"hello3",{value:"hello 3",writable:true,enumerable:true,configurable:true});console.log(newObject.hello3);//3的模板,添加多个属性时可减少代码量var defineProp=function(obj,key,value){//config.value=value; 书中此处的代码用了会报错:config is not defined,故修改了此处代码。var config = {value: value,writable: true,enumerable: true,configurable: true};Object.defineProperty(obj,key,config);};var person=Object.create(null);defineProp(person,"language","js");defineProp(person,"birthday","1989");defineProp(person,"hasBeard",false);//遍历打印person的所有属性for (var obj in person) {console.log(obj + ' : ' + person[obj]);}//4 设置对象属性的另一种方法
    Object.defineProperties(newObject,{"someKey":{value:"hello world",writable:true},"anotherKey":{value:"foo bar",writable:false}});//此处打印用for循环为空,原因不明
    console.log(newObject.someKey);console.log(newObject.anotherKey);//5 继承,子类会获得父类的属性var driver=Object.create(person);defineProp(driver,"topSpeed","100mph");for (var obj in driver) {console.log(obj + ' : ' + driver[obj]);}

9.1.2基本Constructor(构造器)

    //简单的构造器模式function Car(model,year,miles){this.model=model;this.year=year;this.miles=miles;this.toString=function(){return this.model+" has done "+this.miles+" miles";}}

问题:1.使继承变得困难

2.toString()这样的函数是为每个使用Car构造器创建的新对象而分别重新定义的,这不是最理想的,因为这种函数应该在所有的car类型实例之间共享(感觉像是java中的静态方法)

9.1.3带原型的Constructor(构造器)

javascript中有一个名为prototype的属性,调用js构造器创建一个对象后,新对象就会具有构造器原型的所有属性。通过这种方式,可以创建多个car对象,并访问相同的原型。这样toString()这样的方法就能够在所有Car对象之间共享。

//带原型的构造器function Car(model,year,miles){this.model=model;this.year=year;this.miles=miles;};Car.prototype.toString=function(){return this.model+" has done "+this.miles+" miles";};

转载于:https://www.cnblogs.com/blackangle/p/3961352.html

js设计模式之Constructor(构造器)相关推荐

  1. 关于JS中的constructor与prototype

    在学习JS的面向对象过程中,一直对constructor与prototype感到很迷惑,看了一些博客与书籍,觉得自己弄明白了,现在记录如下: 我们都知道,在JS中有一个function的东西.一般人们 ...

  2. [js]设计模式小结对原型的修改

    js设计模式小结 工厂模式/构造函数--减少重复- 创建对象有new- 自动创建obj,this赋值- 无return原型链模式 - 进一步去重类是函数数据类型,每个函数都有prototypecons ...

  3. js observer 添加_简单了解4种JS设计模式

    阅读本文约需要5分钟 大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了15款有用前端开发的ST插件的知识,今天跟大家分享下4种 ...

  4. js设计模式——3.观察者模式

    js设计模式--观察者模式 /*js设计模式--.观察者模式*/// 主题,保存状态,状态变化之后触发所有观察者对象 class Subject {constructor() {this.state ...

  5. JS设计模式--组合模式

    JS设计模式–组合模式 昨天学习了白贺翔老师的JS组合模式,现在把我学到的分享出来叭O(∩_∩)O,直接看下面代码 <!DOCTYPE html> <html lang=" ...

  6. js设计模式笔记小结

    JS 设计模式 面向对象 搭建开发环境 npm / webapck / webpack-dev-server / babel babel-core babel-loader babel-polyfil ...

  7. 【推荐】关于JS中的constructor与prototype【转】

    最初对js中 object.constructor 的认识: 在学习JS的面向对象过程中,一直对constructor与prototype感到很迷惑,看了一些博客与书籍,觉得自己弄明白了,现在记录如下 ...

  8. JS设计模式之Module(模块)模式、Revealing Module(揭示模块)模式

    Module(模块)模式 概念 Module模式最初被定义为一种在传统软件工程中为类提供私有和共有封装的方法. 通过这种方式,能够使一个单独的对象拥有共有/私有方法和变量,从而屏蔽来自全局作用局的特殊 ...

  9. js 设计模式学习(1)

    最近一个人外出旅行 顺便在那座城市买了一本关于JS设计模式的书 供无聊的时候阅读 却发现小有收获 旅游回来以后立马写下心得 做了一个地图 并以此总结此次旅行的经过的地方 尝试1: 尝试写JS类 1 v ...

最新文章

  1. 2021年春季学期-信号与系统-第九次作业参考答案-第六小题
  2. mongodb mysql 事务_MongoDB数据库两阶段提交实现事务的方法详解 _ 蚂蚁视界
  3. DQL数据查询语言——连接查询
  4. 深入理解 C 指针阅读笔记 -- 第六章
  5. C语言 · 约数个数
  6. js 得到select所有option里的值
  7. vc 运行c语言步骤,第1章_C语言概述(vc++环境如何运行c语言程序)[精选].ppt
  8. 程序员面试系列——合并排序(递归实现)
  9. Go使用go-clickhouse库
  10. 动手写一个快速集成网易新闻,腾讯视频,头条首页的ScrollPageView,显示滚动视图...
  11. python搭建博客系统_基于python3.7和django2.1的多人博客系统
  12. 消息人士:苹果要求代工商今年生产9000万部iPhone 13
  13. [UVa 122] Trees On the Level
  14. mysql transaction 实践小问题
  15. webstrom 调试 html,【译】使用 WebStorm 调试 Nuxt.js
  16. python中rank_hackerrank中python题目的套路
  17. windows 超简单实现多用户远程桌面,RDP WRAPPER
  18. 分布形态的度量-偏度系数与峰度系数的探讨
  19. 测试学习-测试工具wireshark、HFS、wlan信号
  20. 在Windows Server 2008上用Windows Media Service打造流媒体直播系统

热门文章

  1. html对定位图片的某一部分_某系统存任意文件上传
  2. Pytorch+Tensorboard混淆矩阵可视化
  3. 循环序列模型 —— 1.2 数学符号
  4. 算数编码与哈夫曼编码的比较【转载】
  5. aarch64(ARMv8)交叉编译环境下载
  6. ffmpeg 静态库使用,undefined reference错误
  7. mysql 自增长改动_优化了MYSQL大量写入问题,老板奖励了1000块给我
  8. Cocos2d x 2 0 从HelloWorld入手
  9. Skywalking-07:OAL原理——解释器实现
  10. 计算机按应用可分为几类,计算机按性能可以分为哪几类