《jQuery技术内幕》一书中关于构造函数返回值里的一句话如何理解?

网友解答: 首先要说明的是,测试的是没有问题的,只是在书中描述不够详细导致了误导;而我认为真正的描述应该是:“如果构造函数有显式返回一个对象,运算符new所创建的对象会被丢弃,返回值将作

网友解答:

首先要说明的是,测试的是没有问题的,只是在书中描述不够详细导致了误导;而我认为真正的描述应该是:“如果构造函数有显式返回一个对象,运算符new所创建的对象会被丢弃,返回值将作为new表达式的值”;

如果要真正的理解原因,首先我们得知道在js中,new到底是干什么用的,在背后又具体做了什么?

概念:new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。

那么,当使用new创建对象时,发生了什么事情呢?以new Foo(...)为例:

1、一个继承自Foo.prototype 的新对象被创建;

2、使用指定参数调用构造函数Foo;并将this绑定到新创建的对象

3、由构造函数返回的对象就是 new 表达式的结果。如果构造函数没有显式返回一个对象,则使用步骤1创建的对象。一般情况下,构造函数不会返回值,但是开发人员也可以主动返回一个对象去覆盖正常默认创建的对象;

所以,由上,我们可以简单猜测new运算符的运行如下函数:

所以,综上,书中描述应该是当构造函数返回对象时,如,对象、数组、函数等只要满足_return instanceof Object为true的,都会进行覆盖;

标签: