Typescript OOP:返回新实例的方法,子对象应该返回什么?
我在用打字脚本。我有一个类,其方法返回该类的新实例Typescript OOP:返回新实例的方法,子对象应该返回什么?,typescript,oop,Typescript,Oop,我在用打字脚本。我有一个类,其方法返回该类的新实例 class A { map (args) { return new A(/* change something*/); } } 我将子类A class B extends A { } 我的问题是:B中的map函数应该返回aB,这在OOP中是否有最佳实践?或者返回A或B(即使用方法覆盖)只是开发人员的选择。这里没有单一的最佳实践。它取决于map的功能以及您希望它具有的语义 一个数据点,具体考虑操作上称为 map < /COD>
class A {
map (args) {
return new A(/* change something*/);
}
}
我将子类A
class B extends A {
}
我的问题是:
B
中的map
函数应该返回aB
,这在OOP中是否有最佳实践?或者返回A
或B
(即使用方法覆盖)只是开发人员的选择。这里没有单一的最佳实践。它取决于map
的功能以及您希望它具有的语义
一个数据点,具体考虑操作上称为<代码> map < /COD>,如数组中的一个(和<代码>过滤器< /代码>,代码>切片,等等):默认情况下,数组中的实现将返回<代码> B<代码>(没有任何特殊的工作)。但是,如果返回
A
更有意义,那么实现可以覆盖默认行为
使用数组默认行为的示例(在JavaScript中,但在TypeScript中工作相同):
B类扩展数组{
}
常数b1=新的B(“a”、“B”、“c”);
const b2=b1.map(entry=>entry.toUpperCase());
console.log(b2 instanceof数组);//真的
console.log(b2 instanceof B);//理想情况下,map
不会硬编码A
,而是在调用的任何类的实例中返回map
。(作为Python中的一个类比,您将定义为类方法defmap(cls):返回cls(…)
而不是defmap(cls):返回a(…)
)为了一致性,您不会期望B
.map返回a
@chepner-对于像Array这样的内置类,您会很高兴知道这正是JavaScript所需要的(因此,TypeScript)不起作用。:-)