- \n
- 目前的方法存在哪些缺点? \n
object Parent {\n name :string = 'parent'\n echoMyName(){\n console.log(`my name is:${this.name}`)\n }\n}\n\nobject Child extends Parent{\n age : number = 20\n echoMyInfo(){\n super.echoMyName()\n console.log(`age:${this.age}`)\n }\n}\n\nParent.echoMyName()\nChild.echoMyInfo()\n
灵感
\n下面是这个提案的灵感说明。
\n我在程序开发中经常使用静态方法,相比于普通函数,静态方法有更好的静态提示和模块区分功能。
\n但是我遇到了一个问题,就是静态方法不能被继承和覆盖,这是我所熟悉的语言中统一的设计规范。
\n但是这在开发过程中确实带来了一些不便,国内有个网站叫知乎
\n为什么java中不用静态方法?
\n静态方法为何不能被覆盖?
\n如果kotlin中class和object关键字的功能结合起来会怎么样?
讨论,这个话题引起了广泛的讨论,有人认为使用静态语法对于OOP来说不够,也有人认为这种方式确实给开发带来了足够的效率提升,提高了开发体验。
\n很多人和我遇到过同样的问题,就是使用静态开发时,需要抽象父类,而方法复用时,无法覆盖static,降低了开发效率。
\n但由于static的特殊逻辑,支持静态方法的覆盖似乎不太合适。
\n那么能不能支持new一个关键字object来实现这个功能呢?
\n对象具备类的功能,可以被类集成,可以被对象继承,也可以直接使用。
\n关于OOP,在Java和Kotlin中都有非常多的实际应用,这里请允许我以Java为例来说明。在Java Web开发中,Spring框架是不可或缺的一个框架。 Spring 管理的对象实例都是单例的,也就是一个类只会有一个实例,大多数情况下都是这样的。但是这种情况下,我们需要先声明一个类,然后实例化这个类才能得到对象,这个过程有点繁琐,我们完全可以将这两步合并为一步,即声明一个带类型提示的对象,然后就可以立即使用了。
\n在 kotlin 中,有 object 关键字语法。以下代码在kotlin中可以运行
\nobject ParentObject {\n var name = \"ParentObject\"\n\n fun echoName() = \"name:${name}\"\n}\n\n// Use\nfun main() {\n println(ParentObject.echoName()) // Output: ParentObject\n}\n
而且kotlin的object支持从class继承,但不支持从object继承,这还是不能解决我一开始遇到的问题
\n所以想问一下这个功能在js/ts中能不能支持
\n期待您的回复,非常感谢
","upvoteCount":1,"answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"你可以试试
\nconst parent = { f() { console.log(this.name) }, name: 'parent' }\nconst child = { __proto__: parent, f() { super.f(); console.log('from child') }, name: 'child' }\nchild.f()
【提案】支持类似kotlin的object关键词,用来解决静态方法无法被继承后重写的问题 #71
-
🔍 搜索词
⭐ 建议支持 object 关键字和 object extends。object 可以 extends object ,object 可以 extends class ,class 可以 extends object 。 📃 励志示例大家好,感谢观看,如果以下内容有不足之处,还请见谅,深表歉意。 这个语法糖对于静态方法爱好者来说将是一个好消息,因为它以另一种方式实现了静态方法重写和继承。 并且在单例对象的情况下,它还避免了冗长的类语法,将类声明与对象创建合并。 与 Object.assign({}, parent, child) 相比,object 关键字可以有更好的类型提示,并支持类继承。这应该只是类语法的语法糖。 我想讨论一下继承的object关键字的语法。 ###💻用例
object关键字语法可以替代和解决静态类无法覆盖的问题,提高开发效率,使语法更简洁,适用于单例对象的场景。 在这个关键字之前,我们的代码需要这样写
灵感下面是这个提案的灵感说明。 我在程序开发中经常使用静态方法,相比于普通函数,静态方法有更好的静态提示和模块区分功能。 但是我遇到了一个问题,就是静态方法不能被继承和覆盖,这是我所熟悉的语言中统一的设计规范。 但是这在开发过程中确实带来了一些不便,国内有个网站叫知乎 为什么java中不用静态方法? 讨论,这个话题引起了广泛的讨论,有人认为使用静态语法对于OOP来说不够,也有人认为这种方式确实给开发带来了足够的效率提升,提高了开发体验。 很多人和我遇到过同样的问题,就是使用静态开发时,需要抽象父类,而方法复用时,无法覆盖static,降低了开发效率。 但由于static的特殊逻辑,支持静态方法的覆盖似乎不太合适。 那么能不能支持new一个关键字object来实现这个功能呢? 对象具备类的功能,可以被类集成,可以被对象继承,也可以直接使用。 关于OOP,在Java和Kotlin中都有非常多的实际应用,这里请允许我以Java为例来说明。在Java Web开发中,Spring框架是不可或缺的一个框架。 Spring 管理的对象实例都是单例的,也就是一个类只会有一个实例,大多数情况下都是这样的。但是这种情况下,我们需要先声明一个类,然后实例化这个类才能得到对象,这个过程有点繁琐,我们完全可以将这两步合并为一步,即声明一个带类型提示的对象,然后就可以立即使用了。 在 kotlin 中,有 object 关键字语法。以下代码在kotlin中可以运行
而且kotlin的object支持从class继承,但不支持从object继承,这还是不能解决我一开始遇到的问题 所以想问一下这个功能在js/ts中能不能支持 期待您的回复,非常感谢 |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 2 replies
-
你可以试试 const parent = { f() { console.log(this.name) }, name: 'parent' }
const child = { __proto__: parent, f() { super.f(); console.log('from child') }, name: 'child' }
child.f() |
Beta Was this translation helpful? Give feedback.
你可以试试