gpt4 book ai didi

javascript - 使用自定义继承系统记录复杂的 JavaScript 对象

转载 作者:行者123 更新时间:2023-11-28 01:29:57 27 4
gpt4 key购买 nike

我目前正在尝试将现有的服务器端 JavaScript API 从现有的手动复制粘贴继承系统迁移到更好、更可靠的系统。不能使用纯原型(prototype),因为对象的状态(变量)也必须继承,并且不能在父对象中重写。

所以我正在考虑使用此处描述的 John Reisig 的一个好的解决方案: http://ejohn.org/blog/simple-javascript-inheritance/

这非常适合我的情况。

我现在面临的唯一挑战是大多数文档框架不会处理这样构造的对象(或者我只是不知道如何告诉他们)。所以我的问题是,我如何记录这样的类:

namespace.ClassA = Class.extend({
name : "",

init: function(name){
this.name = name;
}
});

namespace.ClassB = ClassA.extend({
sayName : function(){
console.log(this.name);
}
});

我更喜欢 JsDoc,但我想不出用 JsDoc 记录此类类的方法。我还尝试了 NaturalDocs,它会有点工作,但我真的不希望所有这些额外的 python 东西都出现在构建过程中。

我认为我遇到的主要问题是命名空间

例如:

    /** @memberof namespace**/
namespace.ClassB = ClassA.extend(
/** @lends ClassB.prototype **/
{
/** @constructs **/
init : function(){
},

sayName : function(){
console.log(this.name);
}
});

不会在命名空间“namespace”中包含或显示 ClassB

最佳答案

看看以下内容是否适合您。请注意,您的代码片段本身不是有效的 JavaScript,因为 namespace 未在任何地方定义。无论如何,jsdoc 都会处理它。我必须做的就是比原本要更冗长。一些注意事项:

  1. 您可以将定义 ClassA 的 doclet 放在包含 namespace.ClassA 的行前面。

  2. @lends 标记需要完整路径:/** @lends namespace.ClassB.prototype */

代码如下:

/**
* @namespace namespace
*/

namespace.ClassA = Class.extend({
name : "",

/**
* @constructor
* @memberof namespace
* @name ClassA
* @param name Blah.
*/
init: function(name){
this.name = name;
}
});

/**
* @constructor
* @memberof namespace
* @name ClassB
*/
namespace.ClassB = ClassA.extend(/** @lends namespace.ClassB.prototype */ {
/**
* @method
*/
sayName : function(){
console.log(this.name);
}
});

关于javascript - 使用自定义继承系统记录复杂的 JavaScript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22246014/

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