0

我正在阅读编写 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)

options 是这样的数组{ "appName":"xyz", "appId":"1141"}

我注意到分配的 this.options 正在 addReportInAppButton 函数中使用,例如 _self.oprions.appName,

这是如何运作的?并且是declare.safeMixin 将对象复制到this.options?

4

1 回答 1

0
  1. 在这两个函数中,_self 等于 this 并且可以安全地删除。很可能这只是一个约定,可能是因为在想要访问它时必须声明 _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并且它会按预期工作。

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

dojo/_base/declare 上的文档为 safeMixin 提供了一些更详细的示例

于 2013-06-17T16:42:47.893 回答