dojo声明构造函数和此对象和safemixin

时间:2013-06-17 13:21:48

标签: javascript constructor dojo declare

我正在阅读编写dojo的应用程序代码。

define(["dojo/ready", "dojo/_base/declare"], function(ready, declare) {
  return declare("application.main", null, {
    constructor: function(options) {
        var _self = this;
        this.options = {};
        declare.safeMixin(_self.options, options);

    }
    addReportInAppButton: function() {
        var _self = this;
        if (_self.options.appName) {
 }});

我对某些观点感到困惑。

  1. 在构造函数和addReportInAppButton中使用 this 关键字并分配给_self属性。
  2. Declare.safeMixin(_self.opt.ons,options)
  3. 选项是这样的数组 {“appName”:“xyz”,“appId”:“1141”}

    我注意到指定this.options正在使用addReportInAppButton函数,如_self.oprions.appName,

    这是如何工作的?并声明.safeMixin将对象复制到this.options?

1 个答案:

答案 0 :(得分:0)

  1. 在这两个函数中,_self等于此,可以安全地删除。很可能这只是一个约定,可能是因为在想要访问它时必须声明_self。回调:

    var _self = this; 
    on(someButton, 'click', function() {
        this.foo() // this !== _self
        _self.foo() // used to access properties of the original context
    }); 
    
  2. 是的,safeMixin将所有选项的属性复制到_self.options中。 safeMixin还确保如果您复制一个函数,您将能够在其上调用 this.inherited ,它将按预期工作。

  3. 您可以在dojo / _base / lang中使用mixin()函数,但如果您尝试在函数上调用this.inherited,则会引发错误。

    docs on dojo/_base/declare有一些更详细的safeMixin示例