《JavaScript启示录》——1.2 JavaScript构造函数构建并返回对象实例

简介: 如果说“构造函数只是一个函数”,那么我会说“你是对的,除非使用new关键字来调用该函数。”(如new String('foo'))。如果使用new调用某函数,该函数则担任一个特殊的角色,JavaScript给予该函数特殊待遇,将该函数的this值设置为正在构建的新对象。

本节书摘来自异步社区《JavaScript启示录》一书中的第1章,第1.2节,作者:【美】Cody Lindley著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.2 JavaScript构造函数构建并返回对象实例

构造函数的作用是创建多个共享特定特性和行为的对象。构造函数主要是一种用于生成对象的饼干模具,这些对象具有默认属性和属性方法。

如果说“构造函数只是一个函数”,那么我会说“你是对的,除非使用new关键字来调用该函数。”(如new String('foo'))。如果使用new调用某函数,该函数则担任一个特殊的角色,JavaScript给予该函数特殊待遇,将该函数的this值设置为正在构建的新对象。除了这个特殊行为,该函数还默认返回新创建的对象(即this),而不是虚假值。该函数返回的新对象则被认为是构建该对象的构造函数的实例。

再次思考Person()构造函数,但这一次要仔细阅读下面代码中的注释,因为其内容强调了new关键字的作用。

<!DOCTYPE html><html lang="en"><body><script>

// Person是一个构造函数,可以使用new关键字进行实例化 

var Person = function Person(living, age, gender) {
    // 下面的this表示即将创建的新对象(即,this = new Object();)
    this.living = living;
    this.age = age;
    this.gender = gender;
    this.getGender = function () { return this.gender; };
    // 一旦该Person函数使用new关键字调用,就返回this,而不是undefined
};

// 实例化Person对象,命名为cody
var cody = new Person(true, 33, 'male');

// cody是一个对象,并且是Person()的一个实例
console.log(typeof cody); // 输出object
console.log(cody); // 输出cody内部的属性和值
console.log(cody.constructor); // 输出Person() 函数

</script></body></html>

上述代码利用了自定义构造函数(即Person())来创建cody对象。这与Array()构造函数创建Array()对象(如new Array())没有什么不同:

<!DOCTYPE html><html lang="en"><body><script>

// 实例化Array对象,命名为myArray
var myArray = new Array(); // myArray是Array的一个实例

// myArray是一个对象,并且是Array()构造函数的一个实例
console.log(typeof myArray); // 输出object! 什么? 是的,数组是object类型

console.log(myArray); // 输出[ ]

console.log(myArray.constructor); // 输出Array()

</script></body></html>

在JavaScript中,大多数值(不包括原始值)都涉及正在被创建的对象,或者是从构造函数实例化的对象。构造函数返回的对象被称为实例。读者要熟悉这些语义,同样要熟悉利用构造函数来构建对象的模式。

相关文章
|
2天前
|
存储 JavaScript 前端开发
JavaScript对象方法详解
JavaScript对象方法详解
10 1
|
3天前
|
JavaScript
js多维数组去重并使具有相同属性的对象数量相加
js多维数组去重并使具有相同属性的对象数量相加
9 1
|
9天前
|
JavaScript 前端开发 API
如何利用JavaScript和Electron构建具有丰富功能的桌面应用
【4月更文挑战第30天】如何利用JavaScript和Electron构建具有丰富功能的桌面应用
5 0
|
9天前
|
缓存 监控 JavaScript
Node.js中构建RESTful API的最佳实践
【4月更文挑战第30天】本文介绍了在Node.js中构建RESTful API的最佳实践:选择合适的框架(如Express、Koa)、设计清晰的API接口(遵循HTTP动词和资源路径)、实现认证授权(JWT、OAuth 2.0)、错误处理、限流缓存、编写文档和测试,以及监控性能优化。这些实践有助于创建健壮、可维护和易用的API。
|
9天前
|
消息中间件 监控 JavaScript
Node.js中的微服务架构:构建与实践
【4月更文挑战第30天】本文探讨了在Node.js中构建微服务的实践,包括定义服务边界、选择框架(如Express、Koa或NestJS)、设计RESTful API、实现服务间通信(HTTP、gRPC、消息队列)、错误处理、服务发现与负载均衡,以及监控和日志记录。微服务架构能提升应用的可伸缩性、灵活性和可维护性。
|
10天前
|
前端开发 JavaScript 数据安全/隐私保护
前端javascript的DOM对象操作技巧,全场景解析(二)
前端javascript的DOM对象操作技巧,全场景解析(二)
|
10天前
|
移动开发 缓存 JavaScript
前端javascript的DOM对象操作技巧,全场景解析(一)
前端javascript的DOM对象操作技巧,全场景解析(一)
|
10天前
|
缓存 编解码 自然语言处理
前端javascript的BOM对象知识精讲
前端javascript的BOM对象知识精讲
|
10天前
|
JavaScript 前端开发
JavaScript 日期对象
JavaScript 日期对象
|
10天前
|
存储 JavaScript 前端开发
JavaScript对象
JavaScript对象