无法在Javascript中更改上下文?

Roy*_*mir 1 javascript

我在这里打破了我的头脑.我有这个简单的代码:

function myFunc()
{
    this.a = "aaa";

    return {
        h: function ()
        {
                   alert(this.a);
        }
    }
}



var f = new myFunc();
console.log(f.h.apply(f)) //I'm expecting to see here : "aaa" but it says "undefined"
Run Code Online (Sandbox Code Playgroud)

f.h看起来完全像这样:

 function ()
 {
      alert(this.a);
     } 
Run Code Online (Sandbox Code Playgroud)

所以,我正在尝试将上下文设置为f自身(包含aprop)apply.

但它不起作用.

我错过了什么?

ps还有其他选择.我知道.但为什么我的具体代码不起作用?

Wil*_*der 6

f 不包含a,因为你返回一个任意对象'覆盖'否则将被返回的默认对象,并且包含一个.

如果你用过

function myFunc() {
  return {
    a:"aaa",
    h:function() { alert this.a; }
  }
}
Run Code Online (Sandbox Code Playgroud)

那会有用!

如果你想使用'私有'和'公共'变量,那么就这样做

function myFunc() {
  var a = "aaa";
  return {
    h:function() { alert a; }
  }
}
Run Code Online (Sandbox Code Playgroud)


Aru*_*hny 5

如果要使用闭包,请创建a为局部变量.这将成为a外部世界无法直接访问的私有财产

function myFunc(){
    var a = "aaa";

    return {
        h: function ()   {
            alert(a);
        }
    }
}

var f = new myFunc();
console.log(f.h(f))
Run Code Online (Sandbox Code Playgroud)

演示:小提琴