Javascript 更好的扩展SVG.Element的方法,它让vscode知道已经进行了更改,并提供了文档
我正在使用,并且描述了一种在库中扩展类的方法,以便向扩展该类的所有对象添加额外的功能 我提出这个示例是为了为从Javascript 更好的扩展SVG.Element的方法,它让vscode知道已经进行了更改,并提供了文档,javascript,node.js,svg,open-source,svg.js,Javascript,Node.js,Svg,Open Source,Svg.js,我正在使用,并且描述了一种在库中扩展类的方法,以便向扩展该类的所有对象添加额外的功能 我提出这个示例是为了为从SVG.Element继承的任何对象提供一个红色边界框 import * as SVG from '@svgdotjs/svg.js'; SVG.extend(SVG.Element, { bounding_box: function(margin) { var bbox = this.bbox() return this.parent().re
SVG.Element
继承的任何对象提供一个红色边界框
import * as SVG from '@svgdotjs/svg.js';
SVG.extend(SVG.Element, {
bounding_box: function(margin) {
var bbox = this.bbox()
return this.parent().rect({
x: bbox.x - margin/2,
y: bbox.y - margin/2,
width: bbox.width + margin,
height: bbox.height + margin
})
.stroke("red")
.attr("fill-opacity", 0)
}
})
但是,尽管这是可行的,但在运行时发生这种情况的事实不允许vscode在继承自SVG.Element
的对象上为该功能提供智能建议。同样,我无法向任何使用此功能文档的人提供此功能
我试图修改元素类主体中的node_modules/@svg.js/dist/svg.node.js
文件以及node_modules/@svgdotjs/svg.js/src/elements/Element.js
以包含我的功能,但尝试使用它时,我收到一个错误,说该功能不存在
我更愿意为这个网站做贡献,但在我能弄清楚这些该死的文件和什么能真正起作用之前,我恐怕没用了
为了将新功能写入库的SVG.Element
类,我需要修改哪个文件?我是否需要克隆回购协议并进行重建
我以前从未做过开源,所以这将是我的第一次。干杯。IntelliSense使用语法子集来增强代码的完整性。不幸的是,关于什么起作用或不起作用的文档并不完整。做出了很多承诺,但有效的清单要小得多 描述此类类扩展的正确JSDoc方法是使用对象文本的
@mixin MyExtension
注释作为SVG.extend()的参数,然后使用@mixes MyExtension
注释类。这在VSCode v1.48中不起作用
相反,虽然@memberof
注释的使用被列为“buggy”,但它似乎起到了某种作用。要混合的方法必须与对象文字分开编写:
//mockup for the purpose of testing
const SVG = {};
SVG.Element = class {
bbox () {
return {x:0, y:0, width:1, height:1}
}
parent () {
return this;
}
}
/**
* @memberof SVG.Element
* @param {number} margin
*/
function bounding_box (margin) {
var bbox = this.bbox()
return this.parent().rect({
x: bbox.x - margin/2,
y: bbox.y - margin/2,
width: bbox.width + margin,
height: bbox.height + margin
})
.stroke("red")
.attr("fill-opacity", 0)
}
SVG.extend(SVG.Element, {bounding_box});
然后,将边界框
函数中的this
正确标识为类型SVG.Element
。写作时
const el = SVG.Element();
el.bounding_box()
.bounding\u box
未作为提示中的方法列出,但键入的margin
参数正确
在侧栏中,大纲将.bounding_box
显示为SVG.Element
的一个成员,但显示为一个属性,而不是一个方法
IntelliSense使用语法子集来增强代码的完整性。不幸的是,关于什么起作用或不起作用的文档并不完整。做出了很多承诺,但有效的清单要小得多
描述此类类扩展的正确JSDoc方法是使用对象文本的@mixin MyExtension
注释作为SVG.extend()的参数,然后使用@mixes MyExtension
注释类。这在VSCode v1.48中不起作用
相反,虽然@memberof
注释的使用被列为“buggy”,但它似乎起到了某种作用。要混合的方法必须与对象文字分开编写:
//mockup for the purpose of testing
const SVG = {};
SVG.Element = class {
bbox () {
return {x:0, y:0, width:1, height:1}
}
parent () {
return this;
}
}
/**
* @memberof SVG.Element
* @param {number} margin
*/
function bounding_box (margin) {
var bbox = this.bbox()
return this.parent().rect({
x: bbox.x - margin/2,
y: bbox.y - margin/2,
width: bbox.width + margin,
height: bbox.height + margin
})
.stroke("red")
.attr("fill-opacity", 0)
}
SVG.extend(SVG.Element, {bounding_box});
然后,将边界框
函数中的this
正确标识为类型SVG.Element
。写作时
const el = SVG.Element();
el.bounding_box()
.bounding\u box
未作为提示中的方法列出,但键入的margin
参数正确
在侧栏中,大纲将.bounding_box
显示为SVG.Element
的一个成员,但显示为一个属性,而不是一个方法