js 怎么来写一个基类

2017-09-12 10:25:59 +08:00
 xiaomeimei
5320 次点击
所在节点    JavaScript
67 条回复
mooncakejs
2017-09-12 10:33:51 +08:00
在 es 里接口声明比较麻烦,抽象基类还有办法,定义一个方法,实现直接 throw
mooncakejs
2017-09-12 10:34:08 +08:00
上 typescript,和 c# 基本差不了多少了。
thisisgpy
2017-09-12 10:34:08 +08:00
class gay {}
arzusyume
2017-09-12 10:34:53 +08:00
class Base {}
class A extends Base {}
murmur
2017-09-12 10:35:18 +08:00
都上了 js 还在想设计模式 你中毒了。。js 要什么设计模式。。不都是推翻重来。。还要继承。。
SuperMild
2017-09-12 10:36:15 +08:00
js 本身不合适,如果不愿意享受原型链的乐趣,最好上 typescript
donlxn22
2017-09-12 10:36:57 +08:00
TypeScript
lamada
2017-09-12 10:37:46 +08:00
TypeScript 你值得拥有
xiaomeimei
2017-09-12 10:42:43 +08:00
@mooncakejs @thisisgpy @SuperMild @donlxn22 @lamada TypeScript 写完后还要「编译」成 javascript,而且还比较麻烦
xiaomeimei
2017-09-12 10:43:33 +08:00
@murmur 但有些基础的东西确实感觉可以用设计模式
murmur
2017-09-12 10:45:50 +08:00
@xiaomeimei 就算是 ES6/TS 背后还是丑陋的原型链
SuperMild
2017-09-12 10:48:10 +08:00
@xiaomeimei 不麻烦,比手写模拟真 OO 方便很多了。
xiaomeimei
2017-09-12 10:49:35 +08:00
@murmur 是啊,背后相当丑陋。throw 的那种方法我想过了,但感觉好丑
murmur
2017-09-12 10:50:22 +08:00
@xiaomeimei 那就学习 vue,用 mixin 的概念代替 extend

react 不也改成 createComponent 了么
xiaomeimei
2017-09-12 10:50:57 +08:00
@SuperMild 又要我装一下编辑器了
zjsxwc
2017-09-12 10:51:08 +08:00
es5 基本不会去用继承(其实语法上也实现不了), 而是和 golang 一样通过组合来实现继承的作用, 比如我想要 obj2 拥有 obj1 的 methodB 能力, 可以这么写:

```
function Class1(constructParamA, constructParamB){
this.constructParamA = constructParamA;
this.constructParamB = constructParamB;
}
Class1.prototype.methodA = function (){};
Class1.prototype.methodB = function (){
console.log(this.constructParamA+this.constructParamB);
};


function Class2(constructParamA){
this.constructParamA = constructParamA;
}
Class2.prototype.methodB = function (){
this.constructParamA.methodB();
};


var obj1 = new Class1("foo","bar");
var obj2 = new Class2(obj1);
obj2.methodB();

```
mooncakejs
2017-09-12 10:51:45 +08:00
@xiaomeimei 配上 vscode 就不麻烦了。
xiaomeimei
2017-09-12 10:52:17 +08:00
@murmur vue 已经在用了,用在网站上。而我们的浏览器扩展上用的是纯 js,直接换 vue,时间成本太高,划不来
xiaomeimei
2017-09-12 10:58:18 +08:00
@zjsxwc 这种方式只可以实现子类使用了父类的 MethodB 方法,但不能强制子类也拥有 MethodA 方法
otakustay
2017-09-12 11:00:12 +08:00
@murmur react 改成 createComponent 了?我感觉要么我穿越回了以前,要么我刚从火星回来

另外原型链丑陋在哪里了?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/389990

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX