0

如何this在 Javascript 中设置 的值?
例如:

var obj = {
    a: 'b',
    c: "d",
    e: function() {
        this = {
            one: 1,
            two: 2
        };
    }
};

这甚至可能吗?

4

4 回答 4

1

您不能this像您要求的那样在 javascript 中显式分配值。

一旦函数开始执行,该函数this内部的值就不会改变(尽管嵌入式函数可以有自己的值this)。

您可以将属性分配给this这样的,所以也许这就是您想要的:

this.one = 1;
this.two = 2;

相反,this它由函数的调用者控制,函数的调用方式决定了this函数内部的设置。例如:

obj.e()

thisinside of的值设置e()obj


您还可以使用.apply()and.call()将值this设置为包含对象以外的其他值。

例如,按照您的要求执行此代码:

var test = {one:1, two:2};
var obj = { a:'b', c:"d", e:function(){
    // this will be set to the test object in here when called as below
}};

obj.e.call(test);

将导致this此特定调用内部的值e()设置为您请求的对象。

于 2013-02-16T19:28:50.750 回答
0
var obj = { a:'b', c:"d", e:function(){
  // Here, this.one === 1 and this.two === 2
}.bind({ one: 1, two : 2})};
于 2013-02-16T19:29:04.113 回答
0

'this' 是一个保留关键字,不能在函数体内设置。

您可以调用具有特定值的函数 this usingapplycall函数上的方法。obj.e.call({one: 1, two: 2}). 查找有关这两个 Function 方法的 MDN 文章。

您还可以使用 ECMAScript 5 的bind方法来永久设置this每次调用函数时的值。这是一种 ECMAScript 5 方法,因此在旧浏览器中不起作用,但是您可以使用一些 polyfill 来为旧浏览器添加对它的支持。

于 2013-02-16T19:33:27.187 回答
0

这个怎么样?

this.one=1;
this.two=2;
于 2013-02-16T19:34:01.443 回答