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')时,使用也应该有效一个次要细节,在严格模式下
未定义
。Not
null
@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");