说我在对象中具有以下属性方法:
onReady: function FlashUpload_onReady()
{
Alfresco.util.Ajax.jsonGet({
url: Alfresco.constants.PROXY_URI + "org/app/classification",
successCallback: {
fn: function (o) {
var classButtonMenu = [],
menuLabel, that = this;
var selectButtonClick = function (p_sType, p_aArgs, p_oItem) {
var sText = p_oItem.cfg.getProperty("text");
that.classificationSelectButton.set("label", sText);
};
for (var i in o.json.items) {
classButtonMenu.push({
text: o.json.items[i].classification,
value: o.json.items[i].filename,
onClick: {fn: selectButtonClick}
});
}
this.classificationSelectButton = new YAHOO.widget.Button({
id: this.id + "-appClassification",
type: "menu",
label: classButtonMenu[0].text,
name: "appClassification",
menu: classButtonMenu,
container: this.id + "-appClassificationSection-div"
});
},
scope: this
},
failureMessage: "Failed to retrieve classifications!"
});
我花了一些猜测才能弄清楚在selectButtonClick
我需要引用的函数中(that
而不是this
为了获得访问权)this.classificationSelectButton
(否则就会出现undefined
),但是我不确定为什么不能使用this
。我最好的猜测是,new YAHOO.widget.Button
一旦调用了构造函数,整个对象中任何在某种程度上被引用的属性都会失去作用域。
有人可以解释为什么我必须引用classificationSelectButton
它var that = this
而不是仅仅调用`this.classificationSelectButton’吗?
要了解的最重要的一点是,函数对象 没有固定的this
值 - this
更改的值取决于函数的调用方式。我们说
_用一个特定的this
值调用_一个函数-该this
值是在调用时间而不是定义时间确定的。
someFunc()
),this
则将是全局对象(window
在浏览器中)(或者undefined
该函数在严格模式下运行)。this
调用,则将成为调用对象。call
或apply
,this
被指定为第一个参数call
或apply
。this
它将是作为事件目标的元素。new
,this
则将是一个新创建的对象,其原型设置为prototype
构造函数的属性。bind
操作的结果,则该函数将始终永远this
设置为产生该函数的bind
调用的第一个参数。(这是唯一的例外的“函数不具有固定的this
”规则-产生由功能bind
实际上 做 有一个不可变this
)。使用var that = this;
是一种this
在函数 定义时 (而不是函数 执行时
,this
可以是什么,取决于函数调用方式)存储值的方法。此处的解决方案是将的外部值存储在新定义的函数的范围内的this
变量(传统上称为that
或self
)中,因为新定义的函数可以访问在其外部范围内定义的变量。
问题内容: 我已经阅读过Java的作用域链,但对我来说却没有任何意义,有人可以告诉我什么是作用域链,以及作用域与图形或什至是白痴都能理解的方式。我用谷歌搜索,但没有找到可理解的东西:( 问题答案: 要了解作用域链,您必须知道闭包是如何工作的。 当您嵌套函数时,会形成一个闭包,内部函数即使在其父函数已经执行后,也可以引用其外部封装函数中存在的变量。 JavaScript通过遍历范围链(从本地到全局)
问题内容: 我正在学习语言,这些要点摘自的规范。 虽然我能理解分1-4,我很困惑的点和: 5. 在函数内部声明的常量或变量标识符的范围始于ConstSpec或VarSpec的末尾(对于简短变量声明为ShortVarDecl),并在最里面的包含块的末尾结束。 6. 在函数内部声明的类型标识符的范围始于TypeSpec中的标识符,并终止于最里面的包含块的末尾。 这是我用来了解Go范围的代码: 据此,我
问题内容: 为什么使用lambda函数来获取值列表i = 4。在调用lambda期间,不存在封闭范围。函数f已经完成工作并返回了控制(变量i不存在)。 问题答案: Python使用闭包捕获对原始变量的引用。这些对象保留对名称的引用,可以通过该引用访问值。这意味着变量在完成后将继续存在。 您可以在lambda对象的元组中内省此闭包;函数具有相同的属性: 这也是列表中 所有 lambda 都引用val
问题内容: 我想做这样的事情 正确的语法是什么?JavaScript可能吗? 所以是一个整数,如果它在这些值之间,请执行某些操作。 问题答案: 这是我想出的另一种方法: