gpt4 book ai didi

javascript - 了解 Javascript 中的类和继承 - 新模式

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:26:54 27 4
gpt4 key购买 nike

我正在为我正在构建的许多应用程序设计 OOP 继承模式。 Javascript 有很多方法可以做到这一点,但我偶然发现了一种我非常喜欢的模式。但现在我正在为分离类和实例的需要而苦苦挣扎。

我有一个名为 Root 的基础对象。它有一个名为 inherit 的主要方法。要创建您使用的新对象

var Person = Root.inherit({
name : "",
height : 0,
walk : function() {},
talk : function() {}
});

然后创建一个“实例”,你会

var sally = Person.inherit({
name : "sally",
height : "5'6"
});

sally 可以 .talk() 并且她可以 walk() 并且她有一个 .name 和一个 .height您可以用同样的方式让更多人受益。

如果你想要一个你使用的构造函数

var Person = Root.inherit({
_construct : function() {
// do things when this object is inherited from
},
name : "",
height : 0,
walk : function() {},
talk : function() {}
});

它也有初始化的能力,当对象第一次在代码中定义时(单例使用这个)

var Person = Root.inherit({
_init : function() {
// called at runtime, NOT called if an object is inherited from me
},
name : "",
height : 0,
walk : function() {},
talk : function() {}
});

如您所见,一切都使用 .inhert()。没有类,也没有真正的实例。一切都是某事的一个实例。到目前为止我发现的唯一真正的问题是没有“类型”的概念,但是如果需要的话,你总是可以检查一个方法。此外,您无法保护“类”,因为如果开发人员不小心更改了“类”或有意更改它,则可以在执行期间更改“类”。

所以我的问题是:在 javascript 中是否需要对类结构和类实例进行显式和受控的分离?将每个对象都视为一个实例有什么问题吗?

最佳答案

不,没有必要,因为 Javascript 是一种基于原型(prototype)的语言,这意味着不涉及类。您只是在创建对象的克隆。

http://en.wikipedia.org/wiki/Prototype-based_programming

就类型的概念而言,类型就是object。

Stoyan Stefanov 的 Javascript Patterns 是了解更多信息的好读物,他有几种不同的创建模式来解决您的问题,包括从四人设计模式中实现设计模式的示例。 http://www.amazon.com/JavaScript-Patterns-Stoyan-Stefanov/dp/0596806752

关于javascript - 了解 Javascript 中的类和继承 - 新模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10594376/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com