不能理解这是指什么

Dev*_*555 3 javascript

以下任何人都可以详细说明innerF,this参考什么?User还是innerF

function User(){
  this.id = 1;
};

User.prototype.sayHi = function(){
    var innerF = function(){
        this.id = 2; // "this" refers to User or innerF ?
    };

    return innerF;
};
Run Code Online (Sandbox Code Playgroud)

也做了new关键字或匿名函数与改变的参考做this关键字?

如果我这样称呼它会怎么样:

var u = User;
var f = u.sayHi();
f();
Run Code Online (Sandbox Code Playgroud)

要么

var u = new User;
var f = u.sayHi();
f();
Run Code Online (Sandbox Code Playgroud)

谢谢

Jar*_*Par 6

什么this地方是指内innerF将取决于函数是如何最终调用.可以通过各种方式调用它来改变其含义this.例如

var u = new User();
var innerF = u.sayHi();
innerF();              // 'this' is window
innerF.call(u);        // 'this' is 'u'
innerF.call("hello");  // 'this' is "hello"
Run Code Online (Sandbox Code Playgroud)

虽然看起来,你要根据你的代码this来引用的实例User,其上sayHi被调用.如果是这样,那么您需要存储this在本地并引用其中的本地innerF.

User.prototype.sayHi = function(){
    var self = this;
    var innerF = function(){
        self.id = 2; 
    };

    return innerF;
};
Run Code Online (Sandbox Code Playgroud)

请注意,虽然this内部sayHi也不保证指向User实例.一般而言,将同样的招数可以做sayHi,都是为那个innerF.例如

var sayHi = u.sayHi;
sayHi();   // 'this' is window
Run Code Online (Sandbox Code Playgroud)