Javascript 如何记录';这';WebStorm中回调函数内的实例?

Javascript 如何记录';这';WebStorm中回调函数内的实例?,javascript,intellij-idea,webstorm,jsdoc,Javascript,Intellij Idea,Webstorm,Jsdoc,有此代码: function Element() { this.name = "yay"; } Element.prototype.extend = function(object) { if (object instanceof Object) { for (var n in object) { if (object.hasOwnProperty(n)) { this[n] = object[n];

有此代码:

function Element() {
    this.name = "yay";
}
Element.prototype.extend = function(object) {
    if (object instanceof Object) {
        for (var n in object) {
            if (object.hasOwnProperty(n)) {
                this[n] = object[n];
            }
        }
    }
};

var el = new Element();
el.extend({
    update: function() {
        console.log(this.name);
    }
});
我想让WebStorm知道
update()
这是
元素的一个实例,但我真的不知道怎么做

我达到的最大值是:

el.extend({
    /**
      * @this Element
      */
    update: function() {
        console.log(this.name);
    }
});
但我不想在每个
extend()
中都这样做

还发现:

/**
 * @typedef {Object} FunctionExtend
 */
/**
 * @param {FunctionExtend} object
 */
Element.prototype.extend = function(object) {
    [...]
但我被困在:

  • 如何声明
    FunctionExtend
    具有未定义数量的参数
  • 如何判断每个
    @参数
    都将是回调,而不知道参数名称
  • 如何判断回调的
    @this
    是什么

首先扩展原型通常是个坏主意™, 而且它不能很好地与JSDoc等编写时文档工具配合使用


您可能别无选择,只能单独记录每个函数。

首先扩展原型通常是个坏主意™, 而且它不能很好地与JSDoc等编写时文档工具配合使用


您可能别无选择,只能单独记录每个函数。

这似乎是不可能的-您希望如何在执行之前知道此
(在运行时确定)的值?如果有人重新绑定
元素.prototype.extend
的上下文怎么办?
this
的值将发生变化,使文档过时。因为这是我自己制作的引擎,我只想在IDE中避免此消息,我可以使用此消息:,但不想在每个函数中都这样做,所以我在想,是否有一种方法可以在扩展函数中执行此操作。我明白了。好的,a)你应该问你真正关心的问题,即“如何避免webstorm IDE中的消息?”和b)也许你应该关闭webstorm中的特定检查,这样它就不会困扰你了:)是的,是的,我知道我可以这样做,但我不想在整个文档中关闭特定检查,所以我问了另一个问题,因为我注意到设置@this“正确”可以修复它。也许我应该重新考虑如何实现自定义方法。在扩展原型之前,我想创建另一个继承主类的类,但我想避免这样做,因为这会使项目更加复杂,但我认为我必须试一试。这似乎是不可能的-在执行之前,您希望如何知道
this
(在运行时确定)的值?如果有人重新绑定
元素.prototype.extend
的上下文怎么办?
this
的值将发生变化,使文档过时。因为这是我自己制作的引擎,我只想在IDE中避免此消息,我可以使用此消息:,但不想在每个函数中都这样做,所以我在想,是否有一种方法可以在扩展函数中执行此操作。我明白了。好的,a)你应该问你真正关心的问题,即“如何避免webstorm IDE中的消息?”和b)也许你应该关闭webstorm中的特定检查,这样它就不会困扰你了:)是的,是的,我知道我可以这样做,但我不想在整个文档中关闭特定检查,所以我问了另一个问题,因为我注意到设置@this“正确”可以修复它。也许我应该重新考虑如何实现自定义方法。在扩展原型之前,我想创建另一个继承主类的类,但我想避免这样做,因为这会使项目更加复杂,但我认为我必须尝试一下。我只是在上面添加了一条注释。我把它复制到这里。因此,在IDE中不可能避免这些消息:?当我使用jQuery进行扩展时,它不会显示错误:。为什么?@JorgeFuentesGonzález您是否尝试过检查
jQuery.fn.extend
函数是如何记录(或实现)的?那里可能有线索。(值得注意的是,以这种方式扩展原型仍然是个坏主意。jQuery也不例外)嗯,是的,你是对的。当我扩展原型时,我首先检查是否已经有另一个同名的原型,以避免重写,但这是一个黑客行为。和我之前说的一样,我已经在上面发表了一条评论,但我在这里半复制了它。在扩展原型之前,我想用另一个类扩展基类,但只是在代码的某个部分添加一个或两个函数,我没有看到使项目更复杂的需要,但我想我最终会这样做。将来我肯定会对这个决定心存感激+1.™@JorgeFuentesGonzález你考虑过组合而不是继承吗?@MadaraUchiha没有考虑过,但我真的很感激:P我肯定会同意的。与原型扩展几乎相同,但具有已知的类,因此保持了OOP流程。我喜欢。我只是在上面加了一条评论。我把它复制到这里。因此,在IDE中不可能避免这些消息:?当我使用jQuery进行扩展时,它不会显示错误:。为什么?@JorgeFuentesGonzález您是否尝试过检查
jQuery.fn.extend
函数是如何记录(或实现)的?那里可能有线索。(值得注意的是,以这种方式扩展原型仍然是个坏主意。jQuery也不例外)嗯,是的,你是对的。当我扩展原型时,我首先检查是否已经有另一个同名的原型,以避免重写,但这是一个黑客行为。和我之前说的一样,我已经在上面发表了一条评论,但我在这里半复制了它。在扩展原型之前,我想用另一个类扩展基类,但只是在代码的某个部分添加一个或两个函数,我没有看到使项目更复杂的需要,但我想我最终会这样做。将来我肯定会对这个决定心存感激+1.™@JorgeFuentesGonzález你考虑过合成吗