0

私は道場を書いたアプリケーションコードを読んでいます。

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, オプション)

options は次のような配列です{ "appName":"xyz", "appId":"1141"}

割り当てられた this.options が、この _self.oprions.appName のような addReportInAppButton 関数で使用されていることに気付きました。

これはどのように作動しますか?そしてdeclare.safeMixinはオブジェクトをthis.optionsにコピーしていますか?

4

1 に答える 1

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を呼び出すことができ、期待どおりに動作することを保証します。

dojo/_base/lang で mixin() 関数を使用できますが、関数で this.inherited を呼び出そうとするとエラーがスローされます。

dojo/_base/declareのドキュメントには、safeMixin のより精巧な例がいくつかあります。

于 2013-06-17T16:42:47.893 に答える