显然,用JavaScript实现基于类的实例方法是一种习惯用法:
function MyClass(){...}
MyClass.prototype.methodA = function(){...}
MyClass.prototype.methodB = function(){...}
...
为什么人们不会使用这种不那么冗长的形式:
function MyClass(){...}
MyClass.prototype = MyClass;
MyClass.methodA = function(){...}
MyClass.methodB = function(){...}
如果MyClass应该从某个基类继承,那么它显然不起作用(在这种情况下,通常应该将原型设置为基类的新实例)。
然而,这些天深层次的继承层次变得越来越少(感谢鸭子打字和混合等等)。
我错过了什么吗?
MyClass.prototype = MyClass使得.constuctor比现在更糟糕了吗?
它是否会干扰typeof,instanceof甚至getPrototypeOf()的错误方式?
它应该被宣传还是被认为有害?
答案 0 :(得分:2)
也许是因为形式更简洁?
MyClass.prototype = {
methodA: function(){},
methodB: function(){}
};
你获得的方法越多越清洁,除此之外,你只是重写默认原型及其上的内容。
答案 1 :(得分:1)
我认为这是没有意义的,如果您的某个方法的名称模糊了Function.prototype中的本机方法,它会让您陷入潜在的麻烦。
您始终可以像这样初始化原型:
function MyConstructor() { ... }
MyConstructor.prototype = {
myMethod: function() { ... },
whatever: null
};
编辑 - 如果你不喜欢创建对象常量(我不得不说如果你要在Javascript中编码很多,我建议你试着习惯他们),你可以这样做:
MyConstructor.prototype = {};
MyConstructor.prototype.myMethod = function() { ... };
我个人不喜欢打那么多打字。