为了账号安全,请及时绑定邮箱和手机立即绑定

js对象方法简写为什么不能用new关键字调用呢?

js对象方法简写为什么不能用new关键字调用呢?

翻过高山走不出你 2019-03-15 17:24:02
查看完整描述

2 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

首先 mdn 上直接有说这个问题:

All method definitions are not constructors and will throw a TypeError if you try to instantiate them.

但结论过于简单,而 ecma规范 里有 Abstract Operations 的说法:

These operations are not a part of the ECMAScript language; they are defined here to solely to aid the specification of the semantics of the ECMAScript language. Other, more specialized abstract operations are defined throughout this specification.

意思就是这些操作不是ECMAScript语言的一部分;它们的定义只是为了帮助规范ECMAScript语言的语义。个人理解就是这些抽象操作是作为ECMAScript语言的辅助操作。比如我们常见的类型转换相关的抽象操作 ToPrimitive。接下来我们找到isconstructor ,该操作就是用来判定一个是否能作为构造函数:

If Type(argument) is not Object, return false.
If argument has a [[Construct]] internal method, return true.
Return false.

意思就是类型必须是对象,且拥有[[Construct]]这个内部方法,才能作为构造函数。那么是否表示对象简写方法形式没有[[Construct]]这个内部方法呢?maybe,这个还要继续去看下其它相关规范,待理解清楚后再来继续回答吧。。。


查看完整回答
反对 回复 2019-03-15
?
慕慕森

TA贡献1856条经验 获得超17个赞

一个函数能否作为构造函数,要满足一下几个条件:
1、 在函数内部对新对象(this)的属性进行设置,通常是添加属性和方法。
2、 构造函数可以包含返回语句(不推荐),但返回值必须是this,或者其它非对象类型的值。
上文定义的构造函数CO就是一个标准的、简单的构造函数。

在你所写的代码中,Person函数中的this指向的是obj对象,而不是Person本身,所以无法当做构造函数使用;


查看完整回答
反对 回复 2019-03-15
  • 2 回答
  • 0 关注
  • 955 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号