这个问题是从语言设计的角度来看的。
我应该稍微解释一下情况。我正在研究一个不支持原型的 javascript 变体,但是它已经过期了一个体面的类型系统(最重要的是支持 instanceof)。ecmascript 规范并不重要,所以我可以自由地实现一些不同且更适合的东西。
在变体中:-
- 您不使用 声明构造函数
function foo()
,而是在模板文件中声明构造函数,这意味着构造函数存在于命名空间中(由文件的路径确定) - 目前,所有行为的继承都是通过应用模板来完成的,这意味着所有共享函数都被复制到每个单独的对象(毕竟没有原型)。
从来没有做过网络开发人员,这让我处于一个有点奇怪的位置,从来没有在愤怒中使用过原型。尽管这并没有阻止我对他们发表意见。
据我了解,我对原型模型的主要问题是
- 对象命名空间、obj.prototype、obj.constructor 不必要的乱扔垃圾(这是一个不成熟的反对意见,试图保留将对象视为映射的能力,也许它们不是?)
- 在运行时更改共享行为的能力似乎没有必要,因为直接使用额外的间接级别会更直接
obj.shared.foo()
。特别是它是一个相当大的实现头痛 - 人们似乎不太了解原型,例如原型和构造函数之间的区别。
所以为了解决这些问题,我的想法是有一个特殊的 operator constructorsof。基本上,原则是每个对象都有一个构造函数列表,有时您会想要访问这些构造函数。
var x = new com.acme.X();
com.acme.Y(x,[]); // apply y
(constructorsof x) // [com.acme.Y,com.acme.X,Object];
x instanceof com.acme.X; // true
x instanceof com.acme.Y; // true
感谢所有反馈,我很感激可能很难欣赏我的 POV,因为我试图传达很多东西,但这是一个重要的决定和专家意见可能是无价的。
- 任何可以提高我对原型模型的理解的东西,好的和坏的。
- 对我的提议的想法
谢谢,
麦克风
编辑:希望提案现在有意义。