Javascript 为什么“this”有时在对象文本中是未定义的?
浏览器错误Javascript 为什么“this”有时在对象文本中是未定义的?,javascript,Javascript,浏览器错误 TypeError:这是未定义的 相关代码 // start of module $A.module({ Name: 'MUserNew', 您使用.bind()做的事情是正确的,但不幸的是此没有您期望的行为。它不接受对象文本中“进行中”对象的值。您必须创建对象,设置处理程序,然后将其传递给“模块”方法 您仍然可以在一个表达式中执行此操作,如下所示: $A.module(function() { var obj = { // ... ente
- TypeError:这是未定义的
// start of module
$A.module({
Name: 'MUserNew',
您使用
.bind()
做的事情是正确的,但不幸的是此
没有您期望的行为。它不接受对象文本中“进行中”对象的值。您必须创建对象,设置处理程序,然后将其传递给“模块”方法
您仍然可以在一个表达式中执行此操作,如下所示:
$A.module(function() {
var obj = {
// ...
enterB: function(event) { ... },
// ...
};
obj.enterB = obj.enterB.bind(obj);
return obj;
}());
您需要在函数定义中使用bind(this)
,如果将定义此
(未定义)。需要调用该函数
/*MUserNew
**
**
**
*/
$A.module({
Name: 'MUserNew',
// ....
init: function () {
this.enter = this.enter.bind(this);
@pure_代码我刚刚更新了答案,预计会有异议:-)@pure_代码代码会将一个对象传递给你的函数-仔细看看。传递给“module”函数的是调用该匿名函数的结果。匿名函数创建并返回对象。在任何情况下,“method”函数都无法说明传递给它的对象是如何创建的。它是一个函数表达式。通常,您会看到它们被括在括号中(如
(function(){…})(
或类似的内容),但只有当您的函数表达式是语句的开头时,才真正需要这样做。在这种情况下,它不是;但是,如果您想,可以将其括在括号中。它们不会伤害任何东西:-)@pure_code No-在匿名函数中,您将其绑定到所创建的对象变量。这就是为什么我将“obj”作为参数传递给.bind()
@pure\u code哦,对了-这取决于代码运行的位置,但是是的,它要么是全局对象,要么是任何这个就是“$A.module()”调用运行的位置。是的,如果您的“module”代码调用“init”函数,这将很好地工作!
$A.module(function() {
var obj = {
// ...
enterB: function(event) { ... },
// ...
};
obj.enterB = obj.enterB.bind(obj);
return obj;
}());
/*MUserNew
**
**
**
*/
$A.module({
Name: 'MUserNew',
// ....
init: function () {
this.enter = this.enter.bind(this);