在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
可以保持一个对象文本。好的,我明白你的意思了。我确信我试过了,但没有成功。我会努力改进答案的,谢谢。