我正在阅读编写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) {
}});
我对某些观点感到困惑。
选项是这样的数组 {“appName”:“xyz”,“appId”:“1141”}
我注意到指定this.options正在使用addReportInAppButton函数,如_self.oprions.appName,
这是如何工作的?并声明.safeMixin将对象复制到this.options?
答案 0 :(得分:0)
在这两个函数中,_self等于此,可以安全地删除。很可能这只是一个约定,可能是因为在想要访问它时必须声明_self。回调:
var _self = this;
on(someButton, 'click', function() {
this.foo() // this !== _self
_self.foo() // used to access properties of the original context
});
是的,safeMixin将所有选项的属性复制到_self.options中。 safeMixin还确保如果您复制一个函数,您将能够在其上调用 this.inherited ,它将按预期工作。
您可以在dojo / _base / lang中使用mixin()函数,但如果您尝试在函数上调用this.inherited,则会引发错误。
docs on dojo/_base/declare有一些更详细的safeMixin示例