gpt4 book ai didi

javascript - 道场要求和范围

转载 作者:行者123 更新时间:2023-11-30 15:29:57 25 4
gpt4 key购买 nike

任何人都可以向我解释为什么当 drawSection 被称为“this”时,值会变成全局范围吗?。

有没有在这里使用 require 而不必在我丢失它之前将小部件保存在另一个变量中的方法?

define("my/TextBox", [
"dojo/_base/declare",
"dijit/form/ValidationTextBox"
], function(
declare, ValidationTextBox
) {

function drawSection() {
alert(this);
require(["dojo/dom-construct"], function(domConstruct) {
alert(this); // this = window
});
};

return declare([ValidationTextBox], {
postCreate: function() {
this.inherited(arguments);
drawSection.call(this)
}
});
});

最佳答案

使用dojo/_base/lang hitch() 函数即可解决问题。

因为 require(["dojo/dom-construct"], function(domConstruct) {....}) 中的函数引用了全局上下文,

所以在当前上下文中使用lang.hitch 函数(通过使用this),问题就解决了

这是一个Fiddle

及以上工作片段:

define("my/TextBox", [
"dojo/_base/lang",
"dojo/_base/declare",
"dijit/form/ValidationTextBox"
], function(lang,
declare, ValidationTextBox
) {

function drawSection() {

alert(this);

require(["dojo/dom-construct"], lang.hitch(this,function(domConstruct) {

alert(this); // this = window

}));

};
return declare([ValidationTextBox], {
postCreate: function() {
this.inherited(arguments);
drawSection.call(this)
}
});

});


require([
"dojo/parser",
"my/TextBox",
"dojo/domReady!"
], function(
parser,
TextBox
) {

// important: parse document after the ValidationTextBox was extended
parser.parse();

});
<link href="https://ajax.googleapis.com/ajax/libs/dojo/1.8/dijit/themes/claro/claro.css" rel="stylesheet"/>
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"></script>

<body class="claro">
<input type="text" data-dojo-type="my/TextBox" />,
</body>

关于javascript - 道场要求和范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42393681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com