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

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

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

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

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

function Person(name, age){
this.name = name;
this.age = age; this.say = say;
} function say(){
alert(this.name + "-->" + this.age);
} var p1 = new Person("Leon",22);
var p2 = new Person("Ada",32);
p1.say();
p2.say(); alert(p1 instanceof Person); //true
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. 【转】如何使用PhoneGap打包Web App

    如何使用PhoneGap打包Web App 最近做了一款小游戏,定位是移动端访问,思来想去最后选择了jQuery mobile最为框架,制作差不多以后,是否可以打包成App,恰好以前对PhoneGap ...

  2. mysql 学习笔记(一)

    查询:show databases; show status; show tables; desc  table-name: 更改root密码:方法一:mysqladmin -uroot -poldp ...

  3. 二. Socket用法

    C/S通信架构中,客户端要主动与服务端建立连接,这个链接就是Socket套接字.服务端收到连接请求后,也会开启Socket记录与客户端的链接.C/S两端都要建路Socket才能正常收发数据. 一.构造 ...

  4. python 读取sqlite3 数据库

    import sqlite3 name = "tom" age = 30 con = sqlite3.connect("d:\\test.db") cur = ...

  5. Spring配置xml文件详解

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  6. NeHe OpenGL教程 第七课:光照和键盘

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  7. weinre 手机端页面调试

    Weinre代表 Web Inspector Remote,是一种远程调试工具, 采用nodejs做为http服务器,用ajax通信 nodejs 官网 weinre官网 1.安装nodejs  会自 ...

  8. [转载]socket下server端支持多客户端并发访问简单实现

    /*Author: wainiwann *Source: 博客园 http://www.cnblogs.com/wainiwann *Remarks:  转载请说明出处!!! */ 感觉很不错,可以学 ...

  9. 用R在字符串中提取匹配的部分

    例如在aaaa12xxxx中提取12,在参考了stackoverflow后比较方便的大致有以下几种方法: 利用sub跟gsub sub(".*?([0-9]+).*", " ...

  10. nvl

    NVL是Oracle PL/SQL中的一个函数.它的格式是NVL( string1, replace_with).它的功能是如果string1为NULL,则NVL函数返回replace_with的值, ...