【问题标题】:this.$initialize is not a functionthis.$initialize 不是函数
【发布时间】:2018-01-19 18:29:43
【问题描述】:

我最近开始使用Bridge.NET,但遇到了问题。

类定义如下

public class DomEngine
{
    public DomEngine()
    {
        // Empty constructor to make sure it works
    }

    /* Lots of irrelevant code removed */
}

还有一个 index.html 像这样

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>MenuGeneratorFromDom</title>

    <script src="bridge.js"></script>
    <script src="bridge.console.js"></script>
    <script src="bridge.meta.js"></script>
    <script src="jquery-2.2.4.js"></script>
    <script src="MenuGeneratorFromDom.js"></script>
    <script src="MenuGeneratorFromDom.meta.js"></script>
</head>
<body>
    <h1>1.0</h1>
    <h4>4.0</h4>
    <h2>2.0</h2>
    <h3>3.0</h3>
    <h4>4.1</h4>
    <h3>3.1</h3>
    <h3>3.2</h3>
    <h2>2.1</h2>
    <h3>3.3</h3>
    <h3>3.4</h3>
    <h4>4.2</h4>
    <h4>4.3</h4>
<script>
    $(function()
    {
        var domEngine = MenuGeneratorFromDom.DomEngine();
    });
</script>
</body>
</html>

我在 Bridge.NET 生成的代码中得到一个this.$initialize is not a function

Bridge.define("MenuGeneratorFromDom.DomEngine", 
{
    ctors: 
    {
        ctor: function () 
        {
            this.$initialize(); // Here
        }
    },
    /* lots of generated code */
}

虽然Initializ() 确实是在bridge.js 中定义的,但

prop.$initialize = Bridge.Class._initialize;

(这里也定义了Bridge.Class._initialize)我们可以在上面的index.html中看到bridge.js包含在MenuGeneratorFromDom.js之前的文件中

我不明白为什么这个Initialize 调用会抛出一个未定义的错误,而它显然是定义的!我是不是忘了用 Bridge.NET 做点什么?

【问题讨论】:

    标签: javascript c# .net bridge.net


    【解决方案1】:

    看起来您只需要在调用中添加 new 关键字即可。您正在调用 DomEngine() 就像一个静态方法,但它是一个构造函数。

    // Fail
    var domEngine = MenuGeneratorFromDom.DomEngine();
    
    // Success!
    var domEngine = new MenuGeneratorFromDom.DomEngine();
    

    这是一个演示场景的简单套牌:

    https://deck.net/847bdcf3ee52dbc3297310507d5b15d3

    希望这会有所帮助。

    【讨论】:

    • 感谢您的回答!您可能是对的,但与此同时,我在使用 git 还原后重新进行了重构,并且它起作用了。但是由于您的回答似乎很有意义,因此我将您标记为回答我的问题。谢谢:-)
    【解决方案2】:

    最后,我将我的存储库恢复到导致此错误的重构之前。我重新进行了重构,在每一步之间进行编译,并检查代码是否每次都能正常工作。错误没有出现,所以我真的不知道是什么原因造成的?

    错误已自行修复,感谢您的关注 :-)

    【讨论】:

      【解决方案3】:

      试试console.log(({}).toString.call(this.$initialize).match(/\s([a-zA-Z]+)/)[1].toLowerCase());

      这应该输出 this.$initialize 的类型

      如果未定义,则永远不会设置。如果它是其他东西,那么您可能需要查看该行,该函数被初始化并深入到右侧值。

      【讨论】:

      • 感谢您的关注!即使错误现在已修复,您能否向我解释一下这段代码的作用?我不确定我是否真的理解它......
      • 是的。它基本上只是输出变量的类型名。
      猜你喜欢
      • 2021-03-31
      • 2012-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-18
      • 2017-11-19
      • 2021-03-17
      相关资源
      最近更新 更多