gpt4 book ai didi

由自定义代码定义/派生定义的 Microsoft Visual Studio 对象中的 Javascript Intellisense

转载 作者:行者123 更新时间:2023-11-28 00:58:48 24 4
gpt4 key购买 nike

情况:使用函数声明您的类

如果您像 WinJs 一样使用和声明具有某些自定义(或框架功能)的类(检查其开源 git 目录),您肯定熟悉这种代码:

函数定义(构造函数,instanceMembers,staticMembers){}

函数衍生(基类,构造函数,instanceMembers,staticMembers){}

define(function constructor(){
this.yourProperty = 1;
}, {
// Prototype object
somePrototypeFunction: function(){
// When you type "this." here, it will not show up "yourProperty" declared
// in the constructor, because you have not instanciated the class,
// intellisense does not know that everything is linked
}
}

这些“自定义”函数的常见问题

当您尝试从原型(prototype)函数访问构造函数中声明的值时,智能感知不会显示这些值。

我发现了一些对我有帮助的东西:http://social.msdn.microsoft.com/forums/windowsapps/en-US/3eee400a-fefd-4f5e-9109-68df03fef006/javascript-intellisense-with-this-inside-gettersetter

这让我找到了我在下面分享给你的解决方案,让它发挥作用是很痛苦的,实际上我正要**再次**放弃这个问题,这确实令人失望,尤其是对于大团队项目。我觉得很奇怪,网上对此的提示并不多,也许是配置问题?然而,我在所看到的所有 VSD 安装中都遇到了这个问题。

因此,如果您遇到同样的情况,希望以下解决方案也能对您有所帮助。

最佳答案

几个小时后,我终于有了一个不完美的解决方案(我已经像在我的 javascript 库中的 C# 中一样处理 .base,但使用以下代码我不能对 intellisense 说这个“.base(.. .) "存在于原型(prototype)函数和构造函数的上下文中)。如果您有任何关于如何做到这一点的提示,请告诉我,我很感兴趣。

在 Visual Studio 2013 上测试。

  • 只需将 window.define/window.derive 更改为您实际使用的命名空间和名称(对于 WinJs,则为 WinJS.Class.define 和 WinJS.Class.derive)。

  • 在 _references.js 中添加您将在库后面放置以下代码的文件的相对路径

仅此而已!您将在您的

中拥有智能感知功能<小时/>
(function (window) {
"use strict";
/*
* Goal: make intellisense understand that the constructor of your define/derive functions are linked to the prototype object you have supplied.
* Tested on WinJs library and other custom libraries.
* Save this in a file, and reference it only in _references.js, insert it after your library containing the define/derive functions
*/

function initIntellisenseFor(constructor, baseClass) {
var inst = new constructor();
// Force intellisense to run function
for (var key in inst) {
if (typeof inst[key] == 'function') {
try {
inst[key]();
} catch (e) {
// Silent fail if wrong arguments (not sure if needed)
}
}
}
// Force intellisense to discover constructor
inst.constructor = constructor;

// Missing: .base() implementation for each method with redirection to the appropriate parent class method
}

var oldDefine = window.define;
window.define = function (constructor, instanceMembers, staticMembers) {
var result = oldDefine.call(this, constructor, instanceMembers, staticMembers);
initIntellisenseFor(result);
return result;
};

var oldDerive = window.derive;
window.derive = function (baseClass, constructor, instanceMembers, staticMembers) {
var result = oldDerive.call(this, baseClass, constructor, instanceMembers, staticMembers);
initIntellisenseFor(result, baseClass);
return result;
};

})(this);

关于由自定义代码定义/派生定义的 Microsoft Visual Studio 对象中的 Javascript Intellisense,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25900665/

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