首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么ES6类的定义方法中缺少"prototype“属性

为什么ES6类的定义方法中缺少"prototype“属性
EN

Stack Overflow用户
提问于 2018-12-06 07:08:34
回答 1查看 146关注 0票数 2

Es6,在那里上课。我们有这样的方法:

ES6中的示例

代码语言:javascript
复制
class X{
   go(){}
}

var y = new X();
var z = new y.go();
console.log(z)

错误屏幕截图示例:

我们没有这个方法的属性原型(go),所以我们不能用这个方法创建新的对象。这就是事实。但我不明白为什么?为什么ES6中的javascript开发人员不让我使用这个功能。

反之亦然,在ES5中,我们可以从对象的方法创建新实例。当然,它也来自原型的方法

Es5中的示例

代码语言:javascript
复制
function X (){}
X.prototype.go = function(){}

var y = new X();
var z = new y.go();
console.log(z)
EN

回答 1

Stack Overflow用户

发布于 2018-12-06 07:14:28

但我不明白为什么?

ES2015区分了两种类型的函数:

  • 可调用函数:可以在没有new的情况下调用的函数,即foo()
  • 可构造函数:可以用new调用的函数。

函数是可调用的还是可构造的,这取决于它是如何定义的。规范只是规定通过方法语法声明的函数是不可构造的。

但这并不能解释这一决定背后的原因。我不能代表TC39委员会发言,但与ES2015的一个明确的努力是减少围绕函数的一些令人惊讶的行为。因此,如何使用某些类型的函数是强制执行的。方法在概念上不是构造函数,因此不能将其称为构造函数。

可构造函数:

可调用函数:

  • 箭头函数
  • 对象/类方法(通过方法语法)
  • 发生器函数
  • 异步函数

两者均:

  • 函数声明/表达式
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53646225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档