首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sanctuary.js (幻想土地)中的类型值和“可访问伪类型”

Sanctuary.js (幻想土地)中的类型值和“可访问伪类型”
EN

Stack Overflow用户
提问于 2017-11-24 12:54:11
回答 1查看 158关注 0票数 0

我正在研究关于Sanctuary.js的文档。我也一直在学习Haskell,并在FP概念方面做了一些斗争。

  1. 据我所知,类型值是具有(a)构造函数(类型代表)、(b)类型标识符(类型名称为名为@@type的属性)和(c)类型所需实现的任何方法的对象。除了没有任何状态的类型值之外,FP类型值和普通的面向对象对象之间有什么区别?“幻想-土地规范”给出了标准的实现类型,包括它们上的方法。一些(全部?)这些方法服从代数定律,就像Functors需要一个服从恒等式和合成律的map方法。我是否可以自由地创建我的用户类型,并要求它们上我喜欢的方法?这些方法是否必须符合任何代数设计原则或规律?如果不是,我肯定会觉得OO设计(对象中的负状态)!我不知道我错过了什么。类型类似于接口吗?父对象?
  2. 圣所文献讨论的是“可访问伪类型”--支持属性访问的值类型,或除nullundefined以外的每个值。它说"Object是关闭的,但是Object.create(null)生成一个值,它支持属性访问,但它不是对象类型的成员“。但是打印一个用null创建的对象会显示{},它的typeofobject。在我看来,似乎是对象类型的成员。我误会什么了?为什么Accessible的psuedo类型是必要的?伪类型和常规类型之间有什么区别呢?例如,Integer被称为伪类,但它似乎是Number类对我的扩展。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-24 13:32:14

除了没有任何状态的类型值之外,FP类型值和普通的面向对象对象之间有什么区别?

这不仅是因为它们没有任何可变状态,而且它们也不像OOP实例那样携带任何值。它们更像是OOP对象的类。它们是只有静态方法的JS对象,或者是不同的:包含普通函数的记录。

我是否可以自由地创建我的用户类型,并要求它们上我喜欢的方法?

是!

这些方法是否必须符合任何代数设计原则或规律?

不是的。是。你可以写不合法的方法,没有什么能阻止你。即使在Haskell,这些法律也不是由编译器/打字机强制执行的。(通常)。

他们甚至可以工作。但它们打破了其他开发人员的假设,打破了这些开发人员编写的代码赖以工作的假设。

类型类似于接口吗?

是的,这可能是个很好的比喻。或者至少,由类型对象实例化的类型类 (JavaScript中必需的具体化)是由类型实现的接口。

打印使用null创建的对象显示为{},其typeof是对象。在我看来,这是一个对象类型的成员。我误会什么了?

instanceof”可能在这里指的是Object.create(null) instanceof Object,而Object.create(null) instanceof Objectfalse,因为它不是从Object.prototype继承的。其他可访问但非Object对象可能是来自其他领域的值,如iframe环境。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47473763

复制
相关文章

相似问题

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