通过构造函数的方式创建和基于工厂的创建类似,最大的区别就是函数的名称就是类的名称,按照java的约定,第一个字母大写。

使用构造函数创建对象时,在函数内部是通过this关键字来完成属性的定义

  1. function Person(name, age){
  2. this.name = name;
  3. this.age = age;
  4.  
  5. //带来的问题是所有的对象都会为该行为分配空间
  6. this.say = function(){ //注意:say也是Person的一个属性
  7. alert(this.name + "-->" + this.age);
  8. }
  9. }
  10.  
  11. //通过new Person来创建对象
  12. var p1 = new Person("Leon",22);
  13. var p2 = new Person("Ada",32);
  14. p1.say();
  15. p2.say();
  16. alert(typeof p1); //object
  17.  
  18. //使用构造函数的方式可以通过以下方式来检测对象的类型
  19. alert(p1 instanceof Person); //true
  20. alert(p1.say == p2.say); //false 由于方法是定义在类中的,所有这两个say不是一样的

使用构造函数创建所带来的第一个问题就是每一个对象都会存在一个方法的拷贝,如果对象的方法很多的话,空间的占有率就会大大增加

如何改进?可以将函数放在全局变量中定义,这样可以让类中的行为/方法指向同一个函数。

  1. function Person(name, age){
  2. this.name = name;
  3. this.age = age;
  4.  
  5. this.say = say;
  6. }
  7.  
  8. function say(){
  9. alert(this.name + "-->" + this.age);
  10. }
  11.  
  12. var p1 = new Person("Leon",22);
  13. var p2 = new Person("Ada",32);
  14. p1.say();
  15. p2.say();
  16.  
  17. alert(p1 instanceof Person); //true
  18. alert(p1.say == p2.say); //true

将行为设置为全局的行为,如果将所有的方法都设计成全局函数的话,这个函数就可以被window调用,此时就破坏了对象的封装性

而且如果某个对象有大量的方法,就会导致整个代码中充斥着大量的全局函数,这样将不利于开发。

JavaScript对象的创建之构造函数的更多相关文章

  1. JavaScript对象的创建

    原文 简书原文:https://www.jianshu.com/p/6cb1e7b7e379 大纲 前言 1.简单方式创建对象的方法 2.工厂模式创建对象 3.构造函数模式创建对象 4.原型模式创建对 ...

  2. JavaScript 对象的创建和操作

    <script>         // 对象是属性的无序集合,每个属性都是一个名/值对. 属性名称是一个字符串.         // 对象种类         // 内置对象(nativ ...

  3. JavaScript对象的创建之基于构造方法+原型方式

    为了解决原型所带来的问题,此处需要通过组合构造方法和原型来实现对象的创建,将属性在构造方法中定义,将方法在原型中定义.这种有效集合了两者的优点,是目前最为常用的一种方式. function Perso ...

  4. JavaScript对象的创建之使用json格式定义

    json: javascript simple object notation. json就是js的对象,但是它省去了xml中的标签,而是通过{}来完成对象的说明. 定义对象 var person = ...

  5. javascript 对象的创建与继承模式

    针对JS高级程序设计这本书,主要是理解概念,大部分要点源自书内.写这个主要是当个笔记加总结 存在的问题请大家多多指正! 6.1理解对象 创建对象的两个方法(暂时) //第一种,通过创建一个Object ...

  6. JavaScript 对象的创建

    Object类型是JavaScript中使用最多的一种类型.创建Object实例的方式有多种,接下来一一列举. 1. Object构造函数 person1的friends属性修改影响了person2的 ...

  7. JavaScript对象的创建之基于原型方式

    原型内存模型介绍 原型是javascript中非常特殊的一个对象,当一个函数创建之后,会随之就产生一个原型对象. 当通过这个函数的构造函数创建一个具体的对象之后,在这个具体的对象中就会有一个属性指向原 ...

  8. javascript对象的创建--相对java 怎样去创建了"类"i以及实例化对象

    由于javascript没有java那么多基本类型,同时也没有提供class这个东西,那么我们想实现javascript的对象创建应该怎么办呢,我简单地从w3c提供的课件中提取了一下几种方法: 一.工 ...

  9. JavaScript 对象的创建和对6种继承模式的理解和遐想

      JS中总共有六种继承模式,包括原型链.借用构造函数.组合继承.原型式继承寄生式继承和寄生组合式继承.为了便于理解记忆,我遐想了一个过程,对6中模式进行了简单的阐述. 很长的一个故事,姑且起个名字叫 ...

随机推荐

  1. EV电池指标及特点

    在电池的大家族中,蓄电池的种类是最多的,共同的特点是可以经历多次充电.放电循环,反复使用,这也正是蓄电池作为电动汽车动力源的基础.当然,并不是所有的蓄电池都适合应用于电动汽车,从全球新能源汽车的发展来 ...

  2. session_write_close()

    功能: 结束当前的session 操作 保存session 数据  说的很明白了, 当脚本请求没有调用session_write_close(); 时虽然 session  的数据是存储住了.但是 s ...

  3. openstack(liberty):部署实验平台(三,简单版本软件安装 之cinder,swift)

    今天这里追加存储相关的部署,主要是Block和Object,为了看到效果,简单的部署在单节点上,即Block一个节点,Object对应一个节点. 读者可能会觉得我这个图和之前的两个post有点点不同, ...

  4. 【转】linux-系统启动流程详解

    第二十章.启动流程.模块管理与 Loader 最近升级日期:2009/09/14 1. Linux 的启动流程分析 1.1 启动流程一览 1.2 BIOS, boot loader 与 kernel ...

  5. FastReport使用一——简介

    一:FastReport Designer用法简介 1.使用FastReport.Net4文件夹下的Designer.exe进行模版的创建工作 图1 图1中,右键删除除==>数据区 之外的其他区 ...

  6. 报错:java.lang.IllegalStateException: Cannot call sendError() after the response has been committed(待解答)

    严重: Servlet.service() for servlet [default] in context with path [/20161101-struts2-1] threw excepti ...

  7. gcc链接参数--whole-archive的作用

    // a.h extern void foo(); // a.cpp #include <stdio.h> void foo() { printf("foo\n"); ...

  8. (C/C++) Interview in English - Class

    Q: What is a class? A: A class is an expanded concept of a data structure: instead of holding only d ...

  9. (C#) 设定时间格式

    private string GetCurrentDateTime() { return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") ...

  10. spark单机模式简单搭建

    待安装列表hadoophivescalaspark一.环境变量配置:~/.bash_profilePATH=$PATH:$HOME/bin export PATH JAVA_HOME=/usr/loc ...