2013-06-17 2 views
0

Я читаю код приложения, который написал dojo.dojo объявить конструктор, и этот объект и safemixin

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 используется этот ключевым слова и назначен _self собственности.
  2. Declare.safeMixin (_self.opt.ons, опционы) Варианты

является массивом, как этот { "APPNAME": "XYZ", "APPID": "одна тысяча сто сорок один"}

Я заметил, что назначенный this.options использует в функции addReportInAppButton, как это _self.oprions.appName,

Как это работает? и declare.safeMixin копирует объект в this.options?

ответ

0
  1. В обеих функциях _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 на нем, и он будет работать как ожидалось.

Вы можете использовать функцию Mixin() в додзё/_Образах базового/Ланге, но это выдаст ошибку, если вы пытались дозвониться this.inherited на функции.

У docs on dojo/_base/declare есть несколько более сложных примеров для safeMixin

 Смежные вопросы

  • Нет связанных вопросов^_^