Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-设置此_Javascript - Fatal编程技术网

Javascript-设置此

Javascript-设置此,javascript,Javascript,如何在Javascript中设置this的值? 例如: var obj = { a: 'b', c: "d", e: function() { this = { one: 1, two: 2 }; } }; obj.e() 这可能吗?您不能像您所要求的那样,在javascript中显式地分配this的值 一旦函数开始执行,该函数内部的this值不会改变(尽管嵌入式函数可以有自己的t

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

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

这可能吗?

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

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

您可以将属性指定给此,例如,这可能就是您想要的:

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

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

var obj = {
    a: 'b',
    c: "d",
    e: function() {
        this = {
            one: 1,
            two: 2
        };
    }
};
obj.e()
e()
内部的
this
的值设置为
obj


您还可以使用
.apply()
.call()
的值设置为包含对象以外的值

例如,要执行您要求的操作,请执行以下代码:

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);

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

“this”是一个保留关键字,不能在函数体中设置

var obj = { a:'b', c:"d", e:function(){
  // Here, this.one === 1 and this.two === 2
}.bind({ one: 1, two : 2})};
您可以使用函数上的
apply
call
方法调用具有此特定值的函数
obj.e.call({one:1,two:2})
。查阅有关这两种函数方法的MDN文章

您还可以使用ECMAScript 5的
bind
方法在每次调用函数时永久设置
this
的值。这是一个ECMAScript 5方法,因此在旧浏览器中不起作用,但可以使用polyFill将其支持添加到旧浏览器中。

这如何

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

如果在函数中创建
{one:1,two:2}
对象,为什么需要将其分配给
this
?你到底想完成什么?看见