Javascript 我不明白这指的是什么
有谁能在下面的Javascript 我不明白这指的是什么,javascript,Javascript,有谁能在下面的innerF中详细说明一下,这个指的是什么用户或innerF function User(){ this.id = 1; }; User.prototype.sayHi = function(){ var innerF = function(){ this.id = 2; // "this" refers to User or innerF ? }; return innerF; }; new关键字或匿名函数是否与更改此关键字的引用
innerF
中详细说明一下,这个指的是什么<代码>用户
或innerF
function User(){
this.id = 1;
};
User.prototype.sayHi = function(){
var innerF = function(){
this.id = 2; // "this" refers to User or innerF ?
};
return innerF;
};
new
关键字或匿名函数是否与更改此
关键字的引用有关
如果我这样称呼它呢:
var u = User;
var f = u.sayHi();
f();
或
谢谢您没有在该代码中调用函数,因此它还没有引用任何内容
this
的值是在调用函数时确定的,而不是定义它(除非您使用类似于bind
的东西)。thislocal在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"
var sayHi = u.sayHi;
sayHi(); // 'this' is window
基于您的代码,尽管您似乎希望此
引用调用了sayHi
的用户
的实例。如果是这样,则需要将此
存储在本地文件中,并在innerF
中引用该本地文件
User.prototype.sayHi = function(){
var self = this;
var innerF = function(){
self.id = 2;
};
return innerF;
};
请注意,sayHi中的this
也不能保证指向User
实例。一般来说,可以对sayHi
执行与对innerF
相同的技巧。比如说
var u = new User();
var innerF = u.sayHi();
innerF(); // 'this' is window
innerF.call(u); // 'this' is 'u'
innerF.call("hello"); // 'this' is "hello"
var sayHi = u.sayHi;
sayHi(); // 'this' is window
上面的代码将抛出错误User
是一个函数,而不是User
对象,因此它没有方法sayHi
,因此您将得到下面的错误
Uncaught TypeError: Object function User(){
this.id = 1;
} has no method 'sayHi'
上面的代码不会抛出错误,u
是User
,()的对象,它的方法sayHi
返回一个函数,您通过f()执行该函数
,因此调用函数时,函数内部的this
引用当前上下文。因此,如果您的代码在全局范围内,this
引用的是窗口
对象
您可以通过f.call(u)设置上下文
,然后这个
引用了对象u
,您将用户对象u
的id更改为2。@Topener:我不知道如何尝试,学习JS:)@Topener:好像我成功地调用了它。您能详细说明调用如何影响这个
的引用吗?用密码。Thanks@Dev555:进行一些研究,阅读一些文档:谢谢,但我想让此
引用innerF
,我还提供了运行它的代码。@Dev555:您想此
引用函数本身吗?为什么不使用innerF.id=…
而不是this
?@Dev555如果您希望this
引用特定的内容,您必须使用调用()
(如此答案所示)或
var u = new User;
var f = u.sayHi();
f();