老师这道题有问题

来源:5-9 选择题

xchengguang

2019-11-26 07:43:16

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

写回答

6回答

菠萝先生

2019-11-26

 function add(){ //函数1
}

function add(){//函数2
}

你没明白构造函数的意义

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

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

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

 function add(){ //函数1
}

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

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

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

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

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

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

0
hchengguang
h “那你说现在调用这两个函数是调用构造函数吗?当然不是,因为他们要new了之后才能确定谁才是构造函数。” 如果说调用的意思不是直接调用而是创造实例,那我理解,我一开始的疑问就是为什么构造函数不可以直接funName(); 我不是要创造实例,只是想调用一下,虽然是构造函数,但构造函数也可以直接调用啊,我的理解是,如果“函数可以直接调用”,那“构造函数可以直接调用”,如果你说“构造函数的直接调用”不是“函数的直接调用”,那这个选项就是错的。
h019-11-26
共1条回复

xchengguang

提问者

2019-11-26

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

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

0

xchengguang

提问者

2019-11-26

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

0

菠萝先生

2019-11-26


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

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

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

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

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

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

xchengguang

提问者

2019-11-26

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

0

好帮手慕星星

2019-11-26

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

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

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

0

0 学习 · 14456 问题

查看课程