aimingoo / aimingoo.github.io

4 stars 3 forks source link

JavaScript的元系统 #556

Open aimingoo opened 6 years ago

aimingoo commented 6 years ago

https://aimingoo.github.io/5b7f6efac66182831afb497b.html

heohpro commented 6 years ago

isAtom(args)结果为false args._proto_指向Object.prototype

aimingoo commented 6 years ago

@hebaby 多谢。确认这是一处错误,更新了。^^.

nextdoorUncleLiu commented 6 years ago

class MetaMeta extends null { constructor(base) { // Atom() by default return Object.setPrototypeOf(class extends new.target {}, base); } } Atom = meta = new MetaMeta 这里报错了,能简单给解释一下吗?看的不是很懂

aimingoo commented 6 years ago

@nextdoorUncleLiu 多谢。这里的问题出在base缺省值上面,给base一个缺省值就可以了。这个已经在博客中修正并加了note。

因为这一段代码是直接从Metameta项目中来的,项目中并不直接暴露MetaMeta()类,而调用暴露出来的Meta()时又缺省地给了这个值,所以不会出错。但是在这篇博客中,为了讲起来简单,就把Meta()这一层封装先去掉了,所以base的缺省值需要自己加上。

MetaMeta()类的目的是返回一个Atom()构造器,它实际上返回了一个类声明表达式,并且将super置成了base——缺省值是基础的、标准的Atom()。亦即是说,它是一个super为Atom()的子类——按照OOP的概念定义,它当然也是一个Atom(),可以构造出atom实例。

nextdoorUncleLiu commented 6 years ago

抱歉,是我没有看源码直接看的文章导致提出这种问题,感谢您的解答,方便的话可不可以加我微信一下:lxc260496725