gpt4 book ai didi

Javascript "classes"(无框架)

转载 作者:行者123 更新时间:2023-11-29 10:25:53 28 4
gpt4 key购买 nike

我正在做我的第一个大量使用对象的 javascript 项目。由于它的工作方式,几乎所有自定义对象都是这样完成的:

namespaceobj = {};
namespaceobj.subobject = {};
namespaceobj.subobject.somefunction = function(arg, uments) {
// Do Stuff
}
namespaceobj.subobject.somedata = 10;
namespaceobj.othersubject = {};
namespaceobj.othersubject.somefunction = function(some, args) {
// Do more stuff
}
// More subobjects etc.

这很好,因为所有自定义对象都只有一个实例(子对象的示例是 UI、工具、共享数据等)。

但是我看到代码做了这样的事情(语法可能是错误的,这只是来自看到类似代码的内存)

function SomeClass() {
this.somedata = 42;
this.somefunction = function(a, few, args) {
// Do Stuff
}
}
// More classes and stuff
// Elsewhere:
someInstance = new SomeClass(); // AFA I recall, new was optional
someInstance.somefunction();

谁能解释一下第二个示例中的“类”是如何工作的,以及我在使用它们时可能遇到的任何陷阱。

最佳答案

我认为您正在考虑的语法如下所示:-

function SomeClass() {
var somedata = 42;
this.somefunction = function(a, few, args) {
// Do Stuff like:-
return somedata + a;
}
}
// More classes and stuff
// Elsewhere:
someInstance = new SomeClass(); // AFA I recall, new was optional
someInstance.somefunction(15); //returns 57

分配给 somefunction 的函数是在 Execution Context 中创建的,它是在执行函数时产生的(在这种情况下,当 SomeClass() 作为分配的新操作的一部分执行时到某个实例)。函数可以访问属于创建它们的执行上下文的一部分的变量,因此在这种情况下,somedata 是 somefunction 有权访问的变量。

这种方法有效地使 somedata 成为对象的私有(private)状态,因为只有在 SomeClass 函数体内创建的函数才能访问它。

这是一个过于简单化的问题,您应该首先考虑在不引用 OO 编程的情况下研究 Javascript,了解作用域链原型(prototype)链。了解这些后,您就可以更好地理解在 Javascript 中实现 OO 设计的不同方法的数量,以及哪种方法最适合您的需求。

关于Javascript "classes"(无框架),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/874559/

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