Javascript-设置此
如何在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
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
?你到底想完成什么?看见