以下任何人都可以详细说明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)
谢谢
什么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)