在JavaScript中的函数表达式中引用它,
我有这样一个资源对象:在JavaScript中的函数表达式中引用它,,javascript,Javascript,我有这样一个资源对象: var resource = { ... All sorts of nifty stuff; ... }; 我想动态创建一个函数表达式,并使用关键字this引用资源对象中的其他函数: resource.url = function(){ return this.constructbaseUrlParams() + this.constructReqeustParams(); }(); 但是这个指的是这里的窗口对象
var resource = {
...
All sorts of nifty stuff;
...
};
我想动态创建一个函数表达式,并使用关键字this
引用资源对象中的其他函数:
resource.url = function(){
return this.constructbaseUrlParams() +
this.constructReqeustParams();
}();
但是这个
指的是这里的窗口
对象
我知道我可以使用:
resource.url = function(){
return resource.constructbaseUrlParams() +
resource.constructReqeustParams();
}();
但是我想使用这个
,这样函数就可以更加模块化,也许可以让我在将来创建多个资源对象而不会出现问题
如何在我的函数表达式中使用它,并且仍然引用我的对象?用于为此
内部指定一个值:
resource.url = function(){ ... }.call(resource);
或使用
用于在以下内容中指定此的值:
resource.url = function(){ ... }.call(resource);
或使用
此
的值由调用函数
的方式确定
并且,没有使用任何关联的上下文对象调用。它只是默认为全局对象,window
您可以使用以下命令指定IIFE的上下文:
此
的值由调用函数
的方式确定
并且,没有使用任何关联的上下文对象调用。它只是默认为全局对象,window
您可以使用以下命令指定IIFE的上下文:
您可以在对象上创建一个新的
url
函数,而不是直接调用它:
var resource = {
foo: function() {
console.log('foo');
}
};
resource.url = function() {
this.foo();
}
resource.url(); //foo
此外,如果您想轻松创建具有不同url
函数的资源的新实例,可以在函数中移动资源对象:
function Resource() {
return {
foo: function() {
console.log('foo');
}
}
}
var r1 = new Resource();
var r2 = new Resource();
r1.url = function() {
this.foo();
}
r1.url(); //foo
r2.url(); //undefined
您可以在对象上创建一个新的
url
函数,而不是直接调用它:
var resource = {
foo: function() {
console.log('foo');
}
};
resource.url = function() {
this.foo();
}
resource.url(); //foo
此外,如果您想轻松创建具有不同url
函数的资源的新实例,可以在函数中移动资源对象:
function Resource() {
return {
foo: function() {
console.log('foo');
}
}
}
var r1 = new Resource();
var r2 = new Resource();
r1.url = function() {
this.foo();
}
r1.url(); //foo
r2.url(); //undefined
资源可以转换为类
function Resource() {
this.constructbaseUrlParams = function() {
return "test";
};
this.constructReqeustParams = function() {
return "test2";
};
this.url = function() {
return this.constructbaseUrlParams() +
this.constructReqeustParams();
}
};
var resource = new Resource();
console.log(resource.url());
资源可以转换为类
function Resource() {
this.constructbaseUrlParams = function() {
return "test";
};
this.constructReqeustParams = function() {
return "test2";
};
this.url = function() {
return this.constructbaseUrlParams() +
this.constructReqeustParams();
}
};
var resource = new Resource();
console.log(resource.url());
此
的值完全取决于函数的调用方式,而不是函数的创建方式。@adeneo我知道。如何调用whateverObject.url中的函数并仍然引用whateverObject?this的值完全取决于函数的调用方式,而不是函数的创建方式。@adeneo我知道。我如何调用whateverObject.url中的函数并仍然引用whateverObject?我必须用谷歌搜索:iLife代表立即调用的函数表达式^^^^给男人一支雪茄你可以指定iLife的内容或上下文吗?@agconti抱歉。打字错误意思是“背景”,没问题。很好的答案+1.我不得不用谷歌搜索:iLife代表立即调用的函数表达式^^^^给男人一支雪茄你可以指定iLife的内容或上下文吗?@agconti抱歉。打字错误意思是“背景”,没问题。很好的答案+1。你的意思是:url
可以变成一种方法吗?你的意思是:url
可以变成一种方法吗?这没什么区别。使url
成为一个函数而不是字符串就可以了。我不知道你想告诉我什么。或者说我不知道。你能扩展一下吗?你说“在函数中移动资源对象”可以解决这个问题。我说你的解决方案实际上是使url
成为一个方法-ressource
可以保持一个对象文本。好的,我明白你的意思了。我确信我试过了,但没有成功。我会努力改进答案的,谢谢。那没什么区别。使url
成为一个函数而不是字符串就可以了。我不知道你想告诉我什么。或者说我不知道。你能扩展一下吗?你说“在函数中移动资源对象”可以解决这个问题。我说你的解决方案实际上是使url
成为一个方法-ressource
可以保持一个对象文本。好的,我明白你的意思了。我确信我试过了,但没有成功。我会努力改进答案的,谢谢。