JavaScript'这'在不同的背景下
JavaScript 'this' in different context
我正在尝试创建一个JavaScript对象,如下所示。
var MyObject = function (parameters) {
this.parameters = parameters;
parameters.userFunction(this.MyObjectCallback);
}
MyObject.SOME_STATIC_VARIABLE = 21;
MyObject.prototype = {
myObjectCallback: function() {
console.log(this);
}
}
MyObject
对象将接受一个userFunction,它将向该userFunction传递一个处理程序。用户函数将执行一些逻辑并将结果传递回实例,例如:
new MyObject({userFunction: function(callback) {
$.post(
'http://localhost/~knyttl/source.php',
{},
callback,
'json');,
}});
不幸的是,即使正确地调用了callback
,this
也会得到JQuery
对象的实例,而不是我想要的MyObject
实例。总之,我无法保留MyObject
实例。
我甚至不确定这是否是创建JavaScript对象的正确方法。如有任何建议,我将不胜感激。
您可以使用.bind
绑定特定的this
值。我还纠正了My
的大写。
parameters.userFunction(this.myObjectCallback.bind(this));
当您调用类似a.b()
的函数时,请在b
内部调用this === a
。但是,如果而不是直接调用它,而是只传递函数(如a.b
)并稍后调用它,则此绑定将丢失。
.bind
返回一个新函数,该函数现在接收作为this
的jQuery ajax结果。然而,它忽略了这一点,并使用预定义的(绑定的)this
调用myObjectCallback
。
.bind
在较旧的浏览器上不可用,但有垫片可用。
请参阅apply()和call()。
parameters.userFunction.call(this, this.MyObjectCallback);
jQuery允许您设置回调的上下文。
你处于一个奇怪的境地,你的设计伤害了你。您的MyObject不能作为上下文传入,因为它是在同一时间创建的。
new MyObject({userFunction: function(callback) {
$.post(
'http://localhost/~knyttl/source.php',
{},
callback,
'json');,
}});
因此:
var myObj = new MyObejct();
myObj.setCallback({userFunction: function (callback) {
$.ajax({
context: myObj,
url: 'http://localhost/what ever /',
success: callback,
dataType: 'json',
data: {}
}
});
试试这个。
var myObject = {
obj1:function(paremeters){
this.Name = paremeters
return this},
};
我建议你阅读,http://javascript.crockford.com/javascript.html
在javascript中使用这个可能会非常令人困惑。当函数被调用时,它被分配给点后面的值,例如
window.doSomething();
将导致此设置为窗口,而
myDOMElement.onClick();
将导致此设置为myDOMElement。
在您的案例中,它归结为JQuery的内部工作方式,因此请查看这组非常全面的解释,以了解JQuery是如何处理this的。
- 如何使用css动画/javascript使具有背景图像的元素出现
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 强制谷歌为javascript背景图像编制索引
- Javascript通过列表项的函数和css来更改背景颜色
- Javascript没有从数组中选择背景颜色
- 背景图像前显示Javascript警报
- javascript背景图像位置循环
- 通过ID JavaScript显示随机背景图像
- JavaScript背景图像
- 无法在qualtrics上使用javascript显示背景图像
- 使用JavaScript的带有背景图像的径向光标
- 使用Javascript对象为具有两个背景图像的DIV设置样式时出现问题
- 背景's/JavaScript在本地显示/工作,而不是在服务器上
- javascript样式的背景颜色在设置时闪烁.ASP.NET
- JavaScript:为什么不't将背景变化发送给用户's选择(简单)
- 使用javascript更改任意文本的背景颜色
- 如果类中的数字大于0,请使用JavaScript更改CSS背景
- 在用Javascript更改背景颜色后:hover don'不要改变颜色
- 预加载图像,然后更改背景JavaScript
- 在边界上也应用背景-Javascript/CSS