首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用MS C#扩展ClearScript类型?

如何用MS C#扩展ClearScript类型?
EN

Stack Overflow用户
提问于 2019-06-10 11:57:06
回答 1查看 420关注 0票数 1

我有几个类(准确地说,我的项目中大约有70-100个类)是用C#编写的。这些类被转换为Javascript (我在我的项目中添加了V8 Javacript MS ClearScript Engine )并集成到我的应用程序中。我希望允许我的客户机用Javascript而不是c#向这些类添加更多的功能。

问题是--我不明白如何将用ClearScript编写的新函数添加到类中(这些函数最初是用c#编写的)。

我不知道该怎么做。有可能吗?

C#编写的Javascript搜索类方法:

代码语言:javascript
复制
    [ScriptMember(ScriptMemberFlags.ExposeRuntimeType)]
    public static MdElement GetClass(string mdClass, string mdClassName)
    {
        ...
    }

C#编写的类MdQuery:

代码语言:javascript
复制
    public class QueryCities : MdQuery {
        // C# methods
        public DataTable GetAll() { ... }
    }

Javascript编写扩展方法:

代码语言:javascript
复制
    function filterByCountry(allCities, countryName) {
        ....
    }

JavaScript书面使用C#类和Javasctipt扩展方法:

代码语言:javascript
复制
    var query = Md.GetClass('MdQuery', 'QueryCities');
    var allCities = query.GetAll();
    var resultList = query.filterByCountry(allCities, 'Angola');
    ...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-10 16:29:28

ClearScript拦截对宿主对象的所有属性访问,但可以使用代理包装器添加或覆盖所需的任何内容。

下面是一个在代理中包装主机对象的函数:

代码语言:javascript
复制
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);
        }
    });
}

你可以这样使用它:

代码语言:javascript
复制
query = extendHostObject(query);
query.ext.filterByCountry = function (allCities, countryName) {
    // TODO: add code here
};
var resultList = query.filterByCountry(query.GetAll(), 'Angola');

显然,这只是一个例子,您可以任意多种方式定制它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56525942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档