Javascript JS无法从不同的函数访问对象值
有人能解释为什么第一件事有效而第二件事无效吗Javascript JS无法从不同的函数访问对象值,javascript,jquery,function,object,Javascript,Jquery,Function,Object,有人能解释为什么第一件事有效而第二件事无效吗 function MyObj(val) { this.value = val; this.myFunc = function(selector) { $(selector).html("test: " + this.value); } } foo = new MyObj("tester"); foo.myFunc("#one"); //This works func = foo.myFunc; func(
function MyObj(val) {
this.value = val;
this.myFunc = function(selector) {
$(selector).html("test: " + this.value);
}
}
foo = new MyObj("tester");
foo.myFunc("#one"); //This works
func = foo.myFunc;
func("#two"); //This doesnt
怎么做?我怎样才能让它工作呢
函数的
这个在JavaScript中没有固定的值;当你打电话的时候
something.somefunc()
// or something['somefunc']()
此
绑定到某物
。当调用没有对象的函数时,此
将绑定到未定义的
(在严格模式下)或全局对象
您可以通过保留一个变量来保存正确的this
:
function MyObj(val) {
var obj = this;
this.value = val;
this.myFunc = function(selector) {
$(selector).html("test: " + obj.value);
};
}
ECMAScript 5提供了一个关于Function.prototype
的方法来专门处理这个问题(通常您也应该将myFunc
放在MyObj.prototype
上):
使用bind()
将this
的值分配给函数:
function MyObj(val) {
this.value = val;
this.myFunc = function(selector) {
console.log(this); // <--- look your console output
$(selector).html("test: "+this.value);
}
}
foo = new MyObj("tester");
foo.myFunc("#one");
func = foo.myFunc;
func.bind(foo)("#two"); // <---- here
演示:LOL JavaScript永远不会停止对我的控制,但是谢谢:)当您通过foo:func.call(foo,#two')时,使用也应该有效代码>一个次要细节,在严格模式下此
将未定义
。Notnull
@jaywalking101:Yikes,还有最近的一个答案!谢谢。虽然从字面上讲,做func.bind(foo)(“#two”)
实际上应该是func.call(foo,“#two”)
。区别在于bind创建了一个新函数,所以他可以使用:func=foo.myFunc.bind(foo)然后就是func(#two”)代码>这就是为什么我说“字面上”:
function MyObj(val) {
this.value = val;
this.myFunc = function(selector) {
console.log(this); // <--- look your console output
$(selector).html("test: "+this.value);
}
}
foo = new MyObj("tester");
foo.myFunc("#one");
func = foo.myFunc;
func.bind(foo)("#two"); // <---- here
func = foo.myFunc.bind(foo);
func("#two");