老师这道题有问题

老师这道题有问题

为什么构造函数不能直接调用?构造函数不也是函数吗 我又不一定非要构造对象

正在回答

登陆购买课程后可参与讨论,去登陆

6回答
 function add(){ //函数1
}

function add(){//函数2
}

你没明白构造函数的意义

第一:构造函数的大小写并不影响它是不是构造函数对不对?

那你可以说明上面的两个函数哪个是构造函数吗?

不能,因为只有下面这样实例化了你才知道哪个是构造函数。

 function add(){ //函数1
}

function Add(){//函数2
}
new Add();

我们改为大写是为了区分哪个是我们要用来作为构造函数的,这说明我们不new之前,谁都可以是构造函数,注意哦,是谁可以,说明现在两个都不是构造函数,那你说现在调用这两个函数是调用构造函数吗?当然不是,因为他们要new了之后才能确定谁才是构造函数。

具体的可参考5-8视频 1分16秒  区分 构造函数和普通函数

第二:B选项错是因为调用函数是 函数名+();而构造函数调用是 new +函数名+();

直接调用的意思是说  函数名+()可以调用构造函数,所以B错了,

构造函数的调用它并不是直接调用 而是要实例化。

  • xchengguang 提问者 #1
    “那你说现在调用这两个函数是调用构造函数吗?当然不是,因为他们要new了之后才能确定谁才是构造函数。” 如果说调用的意思不是直接调用而是创造实例,那我理解,我一开始的疑问就是为什么构造函数不可以直接funName(); 我不是要创造实例,只是想调用一下,虽然是构造函数,但构造函数也可以直接调用啊,我的理解是,如果“函数可以直接调用”,那“构造函数可以直接调用”,如果你说“构造函数的直接调用”不是“函数的直接调用”,那这个选项就是错的。
    2019-11-26 14:25:08
提问者 xchengguang 2019-11-26 13:51:22

"因为要先new了以后这个函数才是构造函数,直接调用是普通函数,不是构造函数。"

而且构造函数不是new出来才是构造函数的吧,构造函数本身是可以用字面量,构造函数,变量赋值三个方法来定义,而构造函数可以用new的方法来生成对象,我是这么理解的。不对的地方希望能得到指正

提问者 xchengguang 2019-11-26 13:36:56

"因为要先new了以后这个函数才是构造函数,直接调用是普通函数,不是构造函数。" 你的解释恰好反应了这个选项有误导性,所有的构造函数都属于普通函数,函数都可以直接调用,构造函数和普通函数不是两个东西,我选择B选项它告诉我B选项是错误的,难道就是说“构造函数不可以直接调用”?

菠萝先生 2019-11-26 13:19:05


B选项说构造函数可以直接调用为什么错呢?

因为要先new了以后这个函数才是构造函数,直接调用是普通函数,不是构造函数。

如果你直接先调用它 他就不能称之为构造函数,这是有先后顺序的。

你的意思其实说的是,构造函数我不new它不也可以调用吗?

是的可以调用,那你这不是调用构造函数,是调用一个普通函数而已。

  • 提问者 xchengguang #1
    "因为要先new了以后这个函数才是构造函数,直接调用是普通函数,不是构造函数。" 你的解释恰好反应了这个选项有误导性,所有的构造函数都属于普通函数,函数都可以直接调用,构造函数和普通函数不是两个东西,我选择B选项它告诉我B选项是错误的,难道就是说“构造函数不可以直接调用”?
    2019-11-26 13:36:30
提问者 xchengguang 2019-11-26 11:01:07

还是会有误导 如果这个选项是错误的 那就是说构造函数到底能不能调用 建议修改

好帮手慕星星 2019-11-26 10:58:28

同学你好,这道题是没有问题的。

实例化后的函数才被称为是构造函数,如果没有实例化就是普通函数。这道题的题目是‘关于构造函数的说法’,所以是需要通过new实例化调用的。

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师