《JavaScript启示录》——1.2 JavaScript构造函数构建并返回对象实例-阿里云开发者社区

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

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

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

相关文章
将成员函数用作可调用对象
19.18编写一个函数,使用count_if统计在给定的vector中有多少个空string。 #include #include #include #include #include using namespace std; int main() { vector...
488 0
[细说Java](3)创建字符串是使用" "还是构造函数?
在Java中,可以使用两种方式创建字符串: String x = "abc"; String y = new String("abc"); 对于这两种方式(双引号,构造函数)它们到底有什么区别呢? 1.
693 0
ArcGIS API for Javascript 3.21地图开发实例(一、图形绘制和删除及popup弹出层)
前言 Arcgis是一个地理系统的平台,可用来进行数据数据展示或二次开发。这里我们所使用的是Arcgis对于JavaScript的api,也就是web端的api进行开发。
9588 0
面向对象编程之super内置函数的用法
先来看一段代码: 定义一个名叫People的父类,又定义了一个叫Teacher的老师类和一个叫Student的学生类 来继承People的类,并根据这两个子类实例化出两个对象s1和t1。 class Date: def __init__(self,year,mon,day): self.
633 0
《JavaScript启示录》——1.2 JavaScript构造函数构建并返回对象实例
如果说“构造函数只是一个函数”,那么我会说“你是对的,除非使用new关键字来调用该函数。”(如new String('foo'))。如果使用new调用某函数,该函数则担任一个特殊的角色,JavaScript给予该函数特殊待遇,将该函数的this值设置为正在构建的新对象。
1350 0
C++函数对象
  原文:http://blog.csdn.net/ggggqqqqihc/article/details/1727020   标准库里的count_if可以统计容器中满足特定条件的元素的个数。例如要统计一个整数vector——ivec中正数的个数,可以先写一个返回类型为bool,含有一个int参数的条件函数: bool pred(int val){ return val>0; }    之后可以用count_if(ivec.begin(),ivec.end(),pred)计算出正整数的个数。
481 0
《算法设计编程实验:大学程序设计课程与竞赛训练教材》——3.3 积性函数的实验范例
本节书摘来自华章计算机《算法设计编程实验:大学程序设计课程与竞赛训练教材》一书中的第3章,第3.3节,作者:吴永辉,王建德著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1212 0
《JavaScript启示录》——1.4 用户自定义/非原生对象构造函数
关于构造函数比较复杂的一点就是this值在函数内部的使用方式。请记住,构造函数只是一个饼干模具,在将它与new关键字一起使用时,它会创建一个拥有构造函数内部定义的属性和值的对象。在使用new关键字时,this值的字面意思是基于构造函数内部的语句创建的新对象/新实例。
1028 0
JavaScript创建对象(二)——构造函数模式
在JavaScript创建对象(一)—— 工厂模式中留下了一个问题,就是创建一个对象怎么判断一个对象的类型。换句话说使用下面这种方式: function createPerson(name, age, job){ var o = new Object(); o.
828 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
12049
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载