对象,一种数据类型。对象是属性(变量)方法(函数)结合在一起的数据实体

对象的出现,就是为了解决封装的问题。可以将许多属性与方法封装在一个对象里,方便调用,也符合人的思考方式。

JavaScript中创建对象的基本方法

  1. 创建Object实例,再添加属性和方法
var person = new Object();person.name = "Jonathan";person.age = 23;person.job = "Developer";person.sayName = function () {console.log(this.name);
};
  1. 对象字面量方法
    由于上述写法繁琐,故出现了对象字面量方法创建对象。
var person = {name: "Jonathan",age: 23,job: "Developer",sayName: function () {console.log(this.name);}
};console.log(person.name); //Jonathan
person.sayName(); //Jonathan

这样一来,就把属性和方法封装进了一个对象中,方便调用。

构造函数模式

如果要创建许多对象,传统方法存在以下问题

  • 对象名太多,容易搞重复
  • 新建一个对象就要全部重写属性和方法,过于复杂
  • 无法发挥JavaScript的面向对象优势(继承)

由于JavaScript本身没有类的概念,因此诞生了构造函数模式来创建对象,该方法利用函数创建对象。由于函数本身也是对象,因此可以这么操作。
构造函数创建对象的方法是:

function Person(name, age, job){this.name = name;this.age = age;this.job = job;this.sayName = function(){console.log(this.name);};
}var person1 = new Person("Nicholas", 29, "Software Engineer");
var person2 = new Person("Greg", 27, "Doctor");

要点:

  1. 构造函数命名应以大写字母开头(约定俗成的规矩)
  2. 构造函数本身也是函数,只不过是用来创建对象的
  3. 要创建对象的实例,必须要用new操作符,否则跟调用函数无异。
  4. 任何函数,只要通过new操作符来调用,它就可以作为构造函数。

至此,一个Person对象的创建就完成了,它有以下优点:

  • 新建对象只用给函数提供参数,简化了创建。
  • 有了实例的概念,如Person1就是Person的实例。无形之中给对象归了类。
  • 更好的体现了封装,创建对象只用给参数,不用关心对象内部细节。

用构造函数模式的方法创建对象并不是完美的,它存在以下问题,即:
每个方法(对象内置函数)都要在实例上重新创建一遍
构造函数也可以用以下方法定义,方便我们发现问题

function Person(name, age, job){this.name = name;this.age = age;this.job = job;this.sayName = new Function(console.log(this.name));};
}var person1 = new Person("Nicholas", 29, "Software Engineer");
var person2 = new Person("Greg", 27, "Doctor");console.log(person1.sayName == person2sayName); //false

在新建对象person1和person2时,分别新建了两个不同的方法person1.sayName()和person2.sayName()。
但这很没有必要,只需要公用一个sayName()方法就好了。为了解决上述问题,诞生了原型模式

JavaScript对象的深入理解 (一)相关推荐

  1. 我对javascript对象的理解

    前言 JavaScript这门语言除了基本类型都是对象,可以说JavaScript核心就是对象,因此理解JavaScript对象及其种种特性至关重要,这是内功.本文介绍了我对es5对象,原型, 原型链 ...

  2. 如何更好地理解Javascript对象的自有属性和原型继承属性

    Javascript对象具有"自有属性"(own property),也有一些属性是从原型对象继承而来的.为了更好地理解对象自有属性和继承属性下面的示例深入解释了属性的访问和设置细 ...

  3. JavaScript对象理解

    1.对象 javascript对象:有助于组织信息 对象仅仅是一种特殊的数据类型?⒂涤幸幌盗械氖粜院头椒ā?lt;br /> 访问对象的属性:对象名.属性名 对象的方法调用:对象名.方法名() ...

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

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

  5. 《JavaScript启示录》——第1章 JavaScript对象 1.1创建对象

    本节书摘来自异步社区<JavaScript启示录>一书中的第1章,第1.1节,作者:[美]Cody Lindley著,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  6. 通过属性值从对象数组中获取JavaScript对象[重复]

    本文翻译自:Get JavaScript object from array of objects by value of property [duplicate] This question alr ...

  7. 如何测试一个空的JavaScript对象?

    在AJAX请求之后,有时我的应用程序可能返回一个空对象,例如: var a = {}; 如何检查情况呢? #1楼 如果您使用的是较新的浏览器,则有一种简单的方法. Object.keys(obj).l ...

  8. 如何正确克隆JavaScript对象?

    我有一个对象x . 我想将其复制为对象y ,以使对y更改不会修改x . 我意识到,复制从内置JavaScript对象派生的对象将导致额外的不需要的属性. 这不是问题,因为我正在复制自己的文字构造对象之 ...

  9. javascript之闭包深入理解(一)

    曾经在开始学习javascript的时候,很是不理解闭包的概念.今天想对它详细的剖析. 在说清楚闭包之前,必须先清楚作用域链. 作用域链 我们知道,执行环境是js中最为重要的一个概念.执行环境定义了变 ...

最新文章

  1. mysql大表迁移_MySQL 大表迁移
  2. 去除源文件中的重复行的程序流程及其C代码实现
  3. C 语言链表其他实现
  4. C语言二叉树的lowest common ancestor最低公共祖先(附完整源码)
  5. 合适是最好,声音选项里面 声音的硬件加速到底有什么用
  6. ROS探索总结(十二)——坐标系统
  7. shell在一个大文件找出想要的一段字符串操作技巧
  8. gateway中的局部过滤器_vue 过滤器
  9. Oracle开发:常用的数据库字段类型[转]
  10. 从字节理解Unicode(UTF8/UTF16)
  11. jQuery + html + css 实现王者荣耀官网首页
  12. Gogs 查看 git 代码地址
  13. java压缩图片maven_java – 在maven构建中集成yahoo smush.it以进行图像压缩
  14. c语言 图书管理系统
  15. vrep小车避障算法_V-REP 多车道巡线与避障
  16. 编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary
  17. 吸烟者问题C++实现
  18. 2020.10.29腾讯QQ音乐社招前端电话一面总结
  19. SMTP rcpt error: 5.7.1 Relay access denied
  20. 计算机网络技术计什么意思,计算机网络技术和计机应用技术.doc

热门文章

  1. php mysql 学习周期_学习PHPMYSQL到目前为止 所有的区别特点
  2. openwrt固件_openwrt固件
  3. python--学习1
  4. func_get_args()获取一个函数的所有参数
  5. spring-boot-devtools 热部署
  6. 总结协查上海银行绑卡失败原因的处理过程
  7. JavaFX加载界面报错:fxcontroller can only be applied to root element?
  8. win10乱码了怎么办一招解决windows乱码问题百度经验_TIA Portal博途常见的15大问题汇总...
  9. 关于Stop The World的几个问题
  10. 深入理解redis中的lua脚本