js 怎么来写一个基类

2017-09-12 10:25:59 +08:00
 xiaomeimei
5269 次点击
所在节点    JavaScript
67 条回复
Biwood
2017-09-12 11:06:59 +08:00
原型链继承怎么就不能用了?看了这么多层回复没一个像样的,根本不需要什么 ES6 语法,老老实实写代码会死么
mooncakejs
2017-09-12 11:12:54 +08:00
@Biwood 来个 abstruct method 或者 interface 看看
zjsxwc
2017-09-12 11:13:25 +08:00
@xiaomeimei #19 实现你这种需求的写法很多的,比如这么写:
```
function Class1(constructParamA, constructParamB){
this.constructParamA = constructParamA;
this.constructParamB = constructParamB;
}
Class1.prototype.methodA = function (){
console.log("methodA >>"+this.constructParamA+this.constructParamB);
};
Class1.prototype.methodB = function (){
console.log(this.constructParamA+this.constructParamB);
};


function Class2(objOfClass1){
this.objOfClass1 = objOfClass1;
for (prop in objOfClass1) {
this[prop] = objOfClass1[prop];
//if ((typeof objOfClass1[prop]) == "function") {
// this[prop] = objOfClass1[prop];
//}
}
}


var obj1 = new Class1("foo","bar");
var obj2 = new Class2(obj1);
obj2.methodA();
obj2.methodB();
```
bramblex
2017-09-12 11:14:59 +08:00
在很多语言里面,基类就是破裤子上面的补丁,用来补泛型这个坑的,你现在拿着一条没有破洞的裤子问补丁在哪?你让我们怎么回答?
learnshare
2017-09-12 11:17:10 +08:00
TypeScript 认可度不低嘛
maomaomao001
2017-09-12 11:18:11 +08:00
原型链明明很好的呀,哪里丑陋了,不过这个时代,直接用 ts, es6.es7 不更好嘛
otakustay
2017-09-12 11:23:07 +08:00
另外几乎所有的设计模式都是面向接口来做的,基类?为什么一定要有基类?
murmur
2017-09-12 11:51:17 +08:00
@otakustay 打错了。。我以为新版改成 createReactComponent 了 我还没升级用的还是 15 的 es5 语法

至于你说原型链丑陋不丑陋 你和正统的 oo 比一下看父子那些关系不用 trick 能实现不就可以了
Tunar
2017-09-12 11:53:06 +08:00
js 怎样写一个鸡肋😂
wobuhuicode
2017-09-12 11:57:33 +08:00
JS 写继承:原型链继承 -> 构造函数继承 -> 组合继承 -> 寄生组合继承
MinonHeart
2017-09-12 11:58:22 +08:00
@Tunar 鸡肋😂
otakustay
2017-09-12 12:10:57 +08:00
@murmur 弱的是语言本身而不是原型链啊,class based OO 的所有功能在原型链上都可以做,trick 是语法层面上的工作,你不能怪罪于底下的概念对吧
murmur
2017-09-12 12:18:40 +08:00
@otakustay 我是有点不太喜欢语法糖的,浏览器里跑的不还都是 es5 语法么,super 字我记得是 es6 的糖

也不太相信 code map,我都升级到 chrome 60.0 了,动不动 code map 断点打不上,断点起飞,所以我宁可用 es5 语法,至少出错的时候停住的位置就是出错的位置

webpack1 打出来的东西还能停住断点,webpack2 的模块就全变成 eval("xxxxxxxxx")了,出错了断点都停不了。。

回楼上一些,不好意思扯远了,我是不太喜欢前端盲目继承的,

但是也不能说基类是泛型的坑,ts 是强类型,不喜欢基类 List<Object>你也可以,越强的约束管水平不好的越好,所以 java 能让一群水平一般的人堆起来做个大项目还能跑,在不考虑性能的前提下,当然对大牛无所谓

见过最恶心的继承就是 EasyUI,dialog->window->panel,但是实际上谁会用 window 和 panel ?我需要的是 dialog=panel+button+header,而不是 dialog extends window extends panel
Hanggi
2017-09-12 12:27:31 +08:00
class Gay {
SorM() {

}
}
qiqico
2017-09-12 12:32:00 +08:00
@murmur webpack2 打断点也没问题的,看你选哪种 sourcemap 方式了
murmur
2017-09-12 12:35:20 +08:00
@qiqico 可以让 hmr 的时候和 webpack1 一样展开全部代码不用 eval 那种么

sourcemap 是没问题 就是 50%的概率没用 不要说版本不一致我当然知道要刷新

现在是不打断点怎么让他停在可以看出是那句出错的地方 就是 pause on exceptions
SilentDepth
2017-09-12 12:37:22 +08:00
拿 OOP 的经验生套到 JS 上,不觉得这样有多高效率,JS 本身也不是干这个的。如果实在要接口,写 TS 就好了,背后被转成了什么样何须操那么大的心。

@murmur #33
ES 版本更迭这事儿就扯远了,历史包袱是客观存在的,但咱还得向前看不是。至少箭头函数在 Chrome 里跑得飞起(尽管那不是一个语法糖)。Sourcemap 的问题,确实有断点打不准的情况,但通常不会差太多,不至于开发调试进行不下去(除非你一行代码套了 N 层 Lambda )。Webpack 2 出来的也是可以调的,我确信是你的配置有问题或你的代码风格需要适应一下。

最后说一句:Vue 大法好~
Mutoo
2017-09-12 12:50:12 +08:00
abstract 和 interface 是静态编译的语言在编译阶段的约束,作为脚本语言,只有在运行时才去处理这些东西没有什么意义。
X41822N
2017-09-12 13:03:14 +08:00
ts
wangyufeng
2017-09-12 13:14:27 +08:00
@SuperMild 乐趣?

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

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

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

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

© 2021 V2EX