JavaScript”;这个“;引用了错误的对象
JavaScript "this" references wrong object
好吧,this
并没有真正引用错误的对象,但我不知道如何引用正确的对象。
function someObj() {
this.someMethod1 = function() {
var elementBtn = document.getElementById('myBtn');
elementBtn.onclick = function() {
this.someMethod2(); //I want this.someMethod2() to be called
//...but it tries to call elementBtn.someMethod2() i believe.
};
};
this.someMethod2 = function() {
alert('OK');
};
}
因此,当单击我的myBtn
时,我希望运行someObj.someMethod2()
。我希望它是someObj
,而不是任何其他someObj
。但是怎么回事?!
您可能需要进行这样的调整:
function someObj() {
var that = this;
this.someMethod1 = function() {
var elementBtn = document.getElementById('myBtn');
elementBtn.onclick = function() {
that.someMethod2();
};
};
this.someMethod2 = function() {
alert('OK');
};
}
"that"捕获了您所追求的范围。
函数关键字更改范围。一种解决方案是维护对要使用的"this"的引用。
尝试以下操作:
function someObj() {
var self = this;
this.someMethod1 = function() {
var elementBtn = document.getElementById('myBtn');
elementBtn.onclick = function() {
self.someMethod2(); //NOTE self
};
};
this.someMethod2 = function() {
alert('OK');
};
}
您可以使用coffee脚本来处理这类事情,它有一个胖箭头(用于onclick函数),并编译成格式良好的javascript。通过使用胖箭头,coffee脚本确保在回调函数中使用与中定义的函数相同的作用域。
在这里玩代码
咖啡脚本
someObj = () ->
@someMethod1 = () ->
elementBtn = document.getElementById 'myBtn'
elementBtn.onclick = () =>
@someMethod2()
this.someMethod2 = () ->
alert 'OK'
JavaScript
var someObj;
var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
someObj = function() {
this.someMethod1 = function() {
var elementBtn;
elementBtn = document.getElementById('myBtn');
return elementBtn.onclick = __bind(function() {
return this.someMethod2();
}, this);
};
return this.someMethod2 = function() {
return alert('OK');
};
};
相关文章:
- 错误:对象没有't支持'自动完成'
- 错误对象,本地和自定义,如何区分
- jQuery Deferred and promise-错误:对象没有't支持属性或方法'然后'
- 如何访问npm模块抛出的自定义错误对象[error:[object object]]
- 如何从 MVC4 链接调用 Javascript 方法(错误 JavaScript 运行时错误:对象不支持此操作)
- 节点发布错误对象的第一个“属性”
- 错误 [对象 BlobConstructor]' 不是 safari 中的构造函数
- JSHint 错误“对象不支持此属性或方法”用于 javascript 闭包
- 下拉 Javascript 错误:对象不支持属性或方法“匹配”
- 运行时错误:对象不支持属性或方法
- JavaScript 错误(Microsoft JScript 运行时错误:对象预期)
- 类型错误:对象 #<对象> 没有方法“身份验证”
- Javascript 错误:对象在 IE 浏览器中不支持此属性或方法
- 如果statusCode不是200,那么从http调用返回什么类型的错误对象
- 未捕获的类型错误:对象#<节点列表>没有方法'addEventListener'
- 未捕获的类型错误:对象没有方法'sortContents'
- MVC4和日期选择器:“;0x800a01b6-JavaScript运行时错误:对象没有't支持属性或方法
- Microsoft JScript运行时错误:对象没有't支持属性或方法'html'
- 未捕获的类型错误:对象#<对象>没有方法'绑定'-脊梁骨
- IE8 Javascript错误:对象没有'不支持此属性或方法