开发者社区> 异步社区> 正文

《JavaScript启示录》——1.18 构造函数实例都拥有指向其构造函数的Constructor属性

简介: 任何对象实例化时,都是在幕后将constructor属性创建为对象/实例的属性。这是指创建对象的构造函数。下面创建一个Object()对象,保存在变量foo中,然后验证constructor属性在创建的对象中是否可用。
+关注继续查看

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

1.18 构造函数实例都拥有指向其构造函数的Constructor属性

任何对象实例化时,都是在幕后将constructor属性创建为对象/实例的属性。这是指创建对象的构造函数。下面创建一个Object()对象,保存在变量foo中,然后验证constructor属性在创建的对象中是否可用。

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

var foo = {};
console.log(foo.constructor === Object) /* 输出true, 因为object()构建了                                          foo */
console.log(foo.constructor) // 指向Object()构造函数

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

如下功能非常方便:如果正在使用一些实例,而无法看到是谁或者是什么创建了它(尤其是别人编写的代码),那么可以以此确定它是否是一个数组或一个对象等。

下面实例化JavaScript语言中的大多数预配置对象。请注意,在字面量/原始值上使用constructor属性能够指向正确的构造函数。

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

var myNumber = new Number('23');
var myNumberL = 23; // 字面量方式
var myString = new String('male');
var myStringL = 'male'; // 字面量方式
var myBoolean = new Boolean('true');
var myBooleanL = true; // 字面量方式
var myObject = new Object();
var myObjectL = {}; // 字面量方式
var myArray = new Array();
var myArrayL = []; // 字面量方式
var myFunction = new Function();
var myFunctionL = function () { }; // 字面量方式
var myDate = new Date();
var myRegExp = new RegExp('/./');
var myRegExpL = /./; // 字面量方式
var myError = new Error();

console.log( // 所有这些都返回true
    myNumber.constructor === Number,
    myNumberL.constructor === Number,
    myString.constructor === String,
    myStringL.constructor === String,
    myBoolean.constructor === Boolean,
    myBooleanL.constructor === Boolean,
    myObject.constructor === Object,
    myObjectL.constructor === Object,
    myArray.constructor === Array,
    myArrayL.constructor === Array,
    myFunction.constructor === Function,
    myFunctionL.constructor === Function,
    myDate.constructor === Date,
    myRegExp.constructor === RegExp,
    myRegExpL.constructor === RegExp,
    myError.constructor === Error
);

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

constructor属性也适用于用户自定义的构造函数。如下代码中,我们定义了一个CustomConstructor()构造函数,然后使用new关键字调用构造函数来生成一个对象。一旦创建了对象,就可以使用constructor属性了。

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

var CustomConstructor = function CustomConstructor() { return 'Wow!'; };
var instanceOfCustomObject = new CustomConstructor();

// 输出true
console.log(instanceOfCustomObject.constructor === CustomConstructor);

// 返回CustomConstructor()函数的一个引用
// 返回 'function() { return 'Wow!'; };'
console.log(instanceOfCustomObject.constructor);

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

注意

  • 大家可能会感到困惑,当不返回对象时,原始值为何拥有指向构造函数的constructor属性。使用原始值的时候,依然调用了构造函数,因此原始值和构造函数依然有关系。然而,最终的结果是一个原始值。
  • 对用户自定义的构造函数表达式,如果想让constructor属性记录构造函数的实际名称,则必须给予构造函数表达式一个实际名称(如var Person = function Person(){};)。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
前端js实现水果放大实例
其实很简单, 我们只需要知道鼠标距离html文档的距离减去水果盒子到页面的距离就可以得到鼠标到水果盒子边的距离
14 0
第11/90步《番外篇》第3章 JS 语法实例讲解 第22课
今天学习《番外篇》第3章 JS 语法实例讲解 第22课 JS 实用技巧二:对象与函数等相关技巧,这节课继续学习有关变量声明、参数定义、箭头函数定义、字符串使用等有关的语法实用技巧。
10 0
第10/90步《番外篇》第3章 JS 语法实例讲解 第21课
今天学习《番外篇》第3章 JS 语法实例讲解 第21课 实用技巧一:操作符、扩展运算符和短路评估等技巧,这节课开始学习 JS 语法的简写技巧。这一课谈及的技巧,多数在前面章节中已有使用,掌握这些技巧,意在使代码更加易写、易读和易于维护。
10 0
第09/90步《番外篇》第3章 JS 语法实例讲解 第20课
今天学习《番外篇》第3章 JS 语法实例讲解 第20课 面向对象语法二:函数、类与作用域,这节课学习与函数、闭包、类和模块有关的面向对象编程基础语法。
12 0
第08/90步《番外篇》第3章 JS 语法实例讲解 第19课
今天学习《番外篇》第3章 JS 语法实例讲解 第19课 面向对象语法一:对象和数组,这节课学习对象与数组。在 JS 中,一切皆为对象,数组也是对象,数组是一种处理集合数据的特殊对象。
13 0
第07/90步《番外篇》第3章 JS 语法实例讲解 第18课
今天学习《番外篇》第3章 JS 语法实例讲解 第18课 JS 语法基础二:操作符和逻辑控制语句,这节课主要学习操作符和基本的逻辑控制语句。
11 0
第06/90步《番外篇》第3章 JS 语法实例讲解 第17课
今天学习《番外篇》第3章 JS 语法实例讲解 第17课 JS 语法基础一:基本数据类型和变量、常量,这节课主要学习 JS 语言的标识符、基本数据类型、变量、常量等内容。
11 0
JavaScript:ES5和ES6区别实例
JavaScript:ES5和ES6区别实例
25 0
JavaScript使用正则表达式进行邮箱表单验证实例
JavaScript使用正则表达式进行邮箱表单验证实例
23 0
js实现websocket实例
js实现websocket实例
89 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
在 IoT 设备进行 JavaScript 开发的探索之路
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多