Javascript JSONP和这个对象
我有一个javascript代码,它使用一个函数和键,我可以使用“this”对象,但我添加了一部分jsonp来使用Web服务,我无法访问“this”对象,强制更改所有代码以从窗口放置整个路由。这是我的原始代码:Javascript JSONP和这个对象,javascript,jquery,javascript-events,jsonp,Javascript,Jquery,Javascript Events,Jsonp,我有一个javascript代码,它使用一个函数和键,我可以使用“this”对象,但我添加了一部分jsonp来使用Web服务,我无法访问“this”对象,强制更改所有代码以从窗口放置整个路由。这是我的原始代码: (function () { "use strict"; console.log("Hello World!"); window.programOne = window.programOne || {}; programOne = {
(function () {
"use strict";
console.log("Hello World!");
window.programOne = window.programOne || {};
programOne = {
varS: {
var1: "One",
var2: null,
var3: "Two"
},
demo: function(data){
console.log( JSON.stringify(data) );
},
execute: function(values){
// Works correctly when calling from programOne.execute({ "item": "Lorem"});
//this.demo(values);
//> { "item": "Lorem"}
//this.varS.var2 = values;
//console.log(this.varS.var1);
console.log(this);
//It is necessary to use it with the callback. The "this" is undefined object.
//Does not work here inside "this" object?
// this.demo(values);
window.programOne.demo(values);
},
start: function(){
window.executeMyCB = programOne.execute;
var script = document.createElement('script');
script.src = "http://whatever.com/the/script.js&callback=executeMyCB";
document.getElementsByTagName('head')[0].appendChild(script);
}
};
// Demo
programOne.execute({ "item": "Lorem"});
programOne.start();
}());
可以访问对象的函数和变量,而不必使用“窗口”指定它?从自己的脚本获取访问权限,但由于运行jsonp的函数(window.executeMyCB)不允许我使用“this”。我认为作为一个javascript新手,我不太理解并适应这段代码解决了我的错误,并且理解了我的问题/这个对象的操作
谢谢使用
函数.prototype.bind
将对象绑定到您创建的全局函数:
window.executeMyCB = programOne.execute.bind(programOne);
或者尝试更改调用以通过对象访问该方法。不确定这是否适用于您的服务:
"http://whatever.com/the/script.js&callback=programOne.execute"
由于您有一个jQuery标记,如果您支持传统浏览器,还可以使用
$.proxy
而不是.bind()
window.executeMyCB = $.proxy(programOne, "execute");
非常感谢。它工作正常,我现在正在阅读关于bind的文章,以了解它工作的原因