【问题标题】:dojo 1.9: what annotation does declare.safeMixin add?dojo 1.9:declare.safeMixin 添加了什么注解?
【发布时间】:2013-11-21 14:10:34
【问题描述】:

我一直在阅读有关declare.safeMixin()dojo 1.9 文档,重点关注它与lang.mixin 之间的区别。

这是我找到的解释...

safeMixin() 是 dojo/declare 中定义的函数。它具有与 dojo/_base/lang::mixin() 相同的功能,但另外它注释所有复制的方法与 dojo/declare 兼容。这种修饰会影响 this.inherited() 在混合方法中的工作方式。

我可以关注example,但它并没有真正解释添加的内容和位置,谁能提供更多示例,说明每个复制的方法中添加了什么注释?

所以要明确一点,我不是要解释继承,我只是专门询问使用declare.safeMixin()而不是lang.mixin添加的注释。

【问题讨论】:

    标签: javascript dojo


    【解决方案1】:

    使用safeMixin 允许您将函数混合到可以利用this.inherited 的实例中,就像使用declare 定义的原型方法一样。

    例如,以下将记录 2 条消息:

    require([
        "dojo/_base/lang",
        "dojo/_base/declare"
    ], function(lang, declare){
        var A = declare(null, {
            method: function () {
                console.log('method in prototype');
            }
        });
        var a = new A();
    
        declare.safeMixin(a, {
            method: function () {
                this.inherited(arguments);
                console.log('method in instance');
            }
        });
    
        a.method();
    });
    

    没有safeMixin,您将无法从覆盖方法调用this.inherited(arguments)(至少,在没有附加参数的情况下)-您最终会收到错误:

    Error: declare: can't deduce a name to call inherited()
    

    【讨论】:

      【解决方案2】:

      safeMixinnom 属性添加到混入目标的函数中。此属性设置为函数分配给的源对象中的键。例如如果您调用declare.safeMixin(target, { foo: function() {} }),则该函数的nom 属性为“foo”。这是this.inherited(arguments) 自动确定它应该调用父级“foo”所必需的。使用safeMixin 的替代方法是显式指定父函数的名称:this.inherited('foo', arguments);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-27
        • 2014-05-24
        • 1970-01-01
        • 2017-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多