通过构造函数的方式创建和基于工厂的创建类似,最大的区别就是函数的名称就是类的名称,按照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调用,此时就破坏了对象的封装性

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

转载于:https://www.cnblogs.com/luogankun/p/3954297.html

JavaScript对象的创建之构造函数相关推荐

  1. Java程序员从笨鸟到菜鸟之(二十九)javascript对象的创建和继承实现

    JavaScript对象的创建 JavaScript中定义对象的几种方式(JavaScript中没有类的概念,只有对象): 1) 基于已有对象扩充其属性和方法:  [html] view plainc ...

  2. JavaScript对象的创建

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

  3. JavaScript对象的创建方式

    JavaScript对象创建 1.直接式 //1.直接创建对象var student = new Object();student.name = "zhangsan";studen ...

  4. 2020.10.25 对象的创建 利用构造函数创建对象 遍历对象属性 遍历函数属性和属性数值for in 内置对象

    输出遵循变量的值就近原则 对象创建方法 : 第一种 var obj = { uname:'dengzhu',//属性的创建,多个属性创建之间用逗号隔开 sex: male; sayHi: functi ...

  5. JavaScript对象的创建之动态原型方式

    为了让定义的方式更加符合java的需求,就把定义方法的原型代码放置在Person这个构造函数中. function Person(name,age,friends){//属性在构造函数中定义this. ...

  6. JavaScript对象的创建总结

    方式 缺点 优点 基于已有对象扩充属性和方法 不可重用,没有约束 无 工厂方法 检测不出是什么的实例 简单封装,可以传参 构造方法 每创建一个对象就有开辟存放方法的空间 能通过instanceof检测 ...

  7. JavaScript对象的创建之外部属性定义方式(基于已有对象扩充其属性和方法)

    var person = new Object(); person.name = "luogk"; person.age = 33; person.say = function() ...

  8. Javascript数组之创建

    一.初识数组 在程序语言中数组有多重要不需要我这个程序媛再复述了,JavaScript中数组也是最常使用的对象之一,数组是值的有序集合,由于弱类型的原因,JavaScript中数组十分灵活,不像Jav ...

  9. javaScript 对象添加属性和创建js对象的方式(以及理解:“无法给构造函数添加新的属性“)

    1.javaScript 对象想要添加属性,非常简单 (1)直接添加,使用语法:objectName.propertyName 添加属性. 举例: var person = new Object(); ...

最新文章

  1. BAT教程 第三节(FOR命令中的变量)
  2. wxWidgets:wxDataObject类用法
  3. MyBatis延迟加载及在spring中集成配置
  4. Java领域的对象如何传输-基于 socket 进行对象传输
  5. 单片机IO引脚驱动能力的提高
  6. mysql error writing_MySQL:Error writing file (Errcode: 28)解决方法
  7. 【Pytorch】expand()用法==》扩展某个维度
  8. phpcmsV9 如何开启“会员注册” - 教程篇
  9. 标准物模型:设备无缝对接,IOT界的福音
  10. shell变量、函数和数组以及字符串的截取
  11. linux 进程 cpu 100,清理linux中占用CPU 100%的病毒
  12. SAP BW报表使用操作手册——基础操作
  13. asp.net接受表单验证格式后再提交数据_药物临床试验数据管理与统计分析的计划和报告指导原则...
  14. iPhonexr安兔兔html5测试,iPhone XR安兔兔跑分多少 苹果iPhone Xr安兔兔跑分公布
  15. 二保焊接中有送丝问题,怎么解决?
  16. 使用vmstat命令监视系统内存--用Enki学Linux系列(14)
  17. 刁生富:《重估:人工智能与人的生存》
  18. 树莓派与声音传感器 python
  19. 不用sqrt()函数,求平方根的三种方法
  20. python大数据之数据清洗

热门文章

  1. JVM堆内存控制/分代垃圾回收
  2. Java System类
  3. java中多条件与不定条件查询
  4. UIButton标题和图片位置的确定法则
  5. ES6系列之Set Map
  6. 中国的EMM市场迎来爆发期?
  7. RaySync 传输协议的有效带宽利用率分析介绍
  8. 搜狗词库爬虫(2):基础爬虫框架的运行流程
  9. 她把肥皂放在矿泉水瓶盖上,第二天大吃一惊...…
  10. Windows Server 2008怎么查看远程桌面登录日志