2016-10-20 20 views
0

有了这个代码:如何在WebStorm的回调函数中记录'this'实例?

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()thisElement的实例,但我真的不知道该怎么做。

我已经达到的最大值是这样的:

el.extend({ 
    /** 
     * @this Element 
     */ 
    update: function() { 
     console.log(this.name); 
    } 
}); 

但我并不想这样做,在每extend()

也发现了这个:

/** 
* @typedef {Object} FunctionExtend 
*/ 
/** 
* @param {FunctionExtend} object 
*/ 
Element.prototype.extend = function(object) { 
    [...] 

但我在卡:

  • 如何声明FunctionExtend有参数不确定的数量。
  • 如何判断每个@parameter将在不知道参数名称的情况下回调。
  • 如何判断回调的@this
+2

这似乎不太可能 - 您如何期望在执行前知道'this'的这个**值(在运行时确定)?如果某人重新绑定了Element.prototype.extend的上下文呢? “this”的值将会改变,从而使文档变得过时。 –

+0

因为是由我自己制作的引擎,我只想避免在IDE中输入以下消息:http://i.imgur.com/FJg6yOh.png,我可以通过以下方式避免此消息:http://i.imgur.com /KjiRSDA.png,但不希望在每个函数中都这样做,所以我在考虑是否有在扩展函数中使用它的方法。 –

+0

我明白了。那么,** a)**你应该问你关心的**真实**问题,即“如何避免webstorm IDE中的___消息?”,以及** b)**也许你应该转向关闭webstorm中的特定检查,以免它妨碍你:) –

回答

2

扩展原型通常是一个糟糕的想法™,它不能很好地用像JSDoc这样的写入时间文档工具。

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

+0

我刚刚在那里添加了一条评论。我在这里半复制。所以在IDE中不可能避免这些消息:http://i.imgur.com/FJg6yOh.png?当我扩展使用jQuery时,它不显示错误:http://i.imgur.com/XtRht51.png。为什么? –

+1

@JorgeFuentesGonzález你有没有试过检查如何记录(或实现)“jQuery.fn.extend”函数?那里可能有线索。 (值得注意的是,用这种方式扩展原型仍然是个不错的主意,jQuery也不例外) –

+0

plus_1为商标:) –

相关问题