我有几个类(准确地说,我的项目中大约有70-100个类)是用C#编写的。这些类被转换为Javascript (我在我的项目中添加了V8 Javacript MS ClearScript Engine )并集成到我的应用程序中。我希望允许我的客户机用Javascript而不是c#向这些类添加更多的功能。
问题是--我不明白如何将用ClearScript编写的新函数添加到类中(这些函数最初是用c#编写的)。
我不知道该怎么做。有可能吗?
C#编写的Javascript搜索类方法:
[ScriptMember(ScriptMemberFlags.ExposeRuntimeType)]
public static MdElement GetClass(string mdClass, string mdClassName)
{
...
}C#编写的类MdQuery:
public class QueryCities : MdQuery {
// C# methods
public DataTable GetAll() { ... }
}Javascript编写扩展方法:
function filterByCountry(allCities, countryName) {
....
}JavaScript书面使用C#类和Javasctipt扩展方法:
var query = Md.GetClass('MdQuery', 'QueryCities');
var allCities = query.GetAll();
var resultList = query.filterByCountry(allCities, 'Angola');
...发布于 2019-06-10 16:29:28
ClearScript拦截对宿主对象的所有属性访问,但可以使用代理包装器添加或覆盖所需的任何内容。
下面是一个在代理中包装主机对象的函数:
function extendHostObject(hostObject) {
let ext = {};
Object.defineProperty(ext, 'ext', { value: ext, writable: false });
return new Proxy(hostObject, {
get: function (target, prop, rec) {
let value = Reflect.get(ext, prop, rec);
return (typeof value !== 'undefined') ? value : Reflect.get(target, prop, rec);
}
});
}你可以这样使用它:
query = extendHostObject(query);
query.ext.filterByCountry = function (allCities, countryName) {
// TODO: add code here
};
var resultList = query.filterByCountry(query.GetAll(), 'Angola');显然,这只是一个例子,您可以任意多种方式定制它。
https://stackoverflow.com/questions/56525942
复制相似问题