老师这道题有问题
来源:5-9 选择题
xchengguang
2019-11-26 07:43:16
为什么构造函数不能直接调用?构造函数不也是函数吗 我又不一定非要构造对象
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
提问者
2019-11-26
"因为要先new了以后这个函数才是构造函数,直接调用是普通函数,不是构造函数。"
而且构造函数不是new出来才是构造函数的吧,构造函数本身是可以用字面量,构造函数,变量赋值三个方法来定义,而构造函数可以用new的方法来生成对象,我是这么理解的。不对的地方希望能得到指正
xchengguang
提问者
2019-11-26
"因为要先new了以后这个函数才是构造函数,直接调用是普通函数,不是构造函数。" 你的解释恰好反应了这个选项有误导性,所有的构造函数都属于普通函数,函数都可以直接调用,构造函数和普通函数不是两个东西,我选择B选项它告诉我B选项是错误的,难道就是说“构造函数不可以直接调用”?
菠萝先生
2019-11-26
B选项说构造函数可以直接调用为什么错呢?
因为要先new了以后这个函数才是构造函数,直接调用是普通函数,不是构造函数。
如果你直接先调用它 他就不能称之为构造函数,这是有先后顺序的。
你的意思其实说的是,构造函数我不new它不也可以调用吗?
是的可以调用,那你这不是调用构造函数,是调用一个普通函数而已。
xchengguang
提问者
2019-11-26
还是会有误导 如果这个选项是错误的 那就是说构造函数到底能不能调用 建议修改
好帮手慕星星
2019-11-26
同学你好,这道题是没有问题的。
实例化后的函数才被称为是构造函数,如果没有实例化就是普通函数。这道题的题目是‘关于构造函数的说法’,所以是需要通过new实例化调用的。
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
相似问题